我们在这篇文章中为大家介绍的是有关Ruby case when表达式的一些基本使用技巧。比如是否能够在Groovy中得到支持等。
Ruby语言中存在着许多表达式,这些表达式用法不尽相同,实现的功能也不同。熟练的掌握这些表达式的用法,可以有助于我们编程的方便性。今天看到有人在Groovy的邮件列表上问Groovy能不能支持Ruby case when表达式:#t#
Ruby case when表达式代码示例:
- car="Patriot"
- manufacturer=casecar
- when"Focus":"Ford"
- when"Navigator":"Lincoln"
- when"Camry":"Toyota"
- when"Civic":"Honda"
- when"Patriot":"Jeep"
- when"Jetta":"VW"
- when"Ceyene":"Porsche"
- when"Outback":"Subaru"
- when"520i":"BMW"
- when"Tundra":"Nissan"
- else"Unknown"
- end
- puts"The"+car+"ismadeby
"+manufacturer - car="Patriot"
- manufacturer=casecar
- when"Focus":"Ford"
- when"Navigator":"Lincoln"
- when"Camry":"Toyota"
- when"Civic":"Honda"
- when"Patriot":"Jeep"
- when"Jetta":"VW"
- when"Ceyene":"Porsche"
- when"Outback":"Subaru"
- when"520i":"BMW"
- when"Tundra":"Nissan"
- else"Unknown"
- end
- puts"The"+car+"ismadeby
"+manufacturer
然后Guillaume给出了这么一段Ruby case when表达式代码:
- defcar="Patriot"
- defmanufacturer=match(car){
- when"Focus","Ford"
- when"Navigator","Lincoln"
- when"Camry","Toyota"
- when"Civic","Honda"
- when"Patriot","Jeep"
- when"Jetta","VW"
- when"Ceyene","Porsche"
- when"Outback","Subaru"
- when"520i","BMW"
- when"Tundra","Nissan"
- otherwise"Unknown"
- }
- println"The$carismadeby
$manufacturer"- defmatch(obj,closure){
- closure.subject=obj
- closure.when={value,result->
- if(value==subject)
- thrownewMatchResultException
(result:result)- }
- closure.otherwise={returnit}
- closure.resolveStrategy=
Closure.DELEGATE_FIRST- try{
- closure()
- closure.otherwise()
- }catch(MatchResultExceptionr){
- r.result
- }
- }
- classMatchResultException
extendsRuntimeException{- defresult
- }
- defcar="Patriot"
- defmanufacturer=match(car){
- when"Focus","Ford"
- when"Navigator","Lincoln"
- when"Camry","Toyota"
- when"Civic","Honda"
- when"Patriot","Jeep"
- when"Jetta","VW"
- when"Ceyene","Porsche"
- when"Outback","Subaru"
- when"520i","BMW"
- when"Tundra","Nissan"
- otherwise"Unknown"
- }
- println"The$carismade
by$manufacturer"- defmatch(obj,closure){
- closure.subject=obj
- closure.when={value,result->
- if(value==subject)
- thrownewMatchResultException
(result:result)- }
- closure.otherwise={returnit}
- closure.resolveStrategy=
Closure.DELEGATE_FIRST- try{
- closure()
- closure.otherwise()
- }catch(MatchResultExceptionr){
- r.result
- }
- }
- classMatchResultException
extendsRuntimeException{- defresult
- }
我不是很喜欢里面用异常来控制程序的流程,而且觉得“when "Focus", "Ford"”中间的逗号不够直观,因此就在上面的Ruby case when表达式代码的基础上做了一些修改:
- defmatch(subject,closure){
- defwhenMap=[:],otherwise=null
- closure.when={map->whenMap.putAll(map)}
- closure.otherwise={otherwise=it}
- closure.resolveStrategy=Closure.DELEGATE_FIRST
- closure()
- defresult=whenMap.find{condition,
value->subjectincondition}- returnresult?result.value:otherwise
- }
- defmanufacturer(car){
- match(car){
- when"Focus":"Ford"
- when"Navigator":"Lincoln"
- when"Camry":"Toyota"
- when"Civic":"Honda"
- when"Patriot":"Jeep"
- when"Jetta":"VW"
- when"Ceyene":"Porsche"
- when"Outback":"Subaru"
- when"520i":"BMW"
- when"Tundra":"Nissan"
- otherwise"Unknown"
- }
- }
- println"ThePatriotismade
by${manufacturer('Patriot')}"- println"TheQQismadeby$
{manufacturer('QQ')}"- defmatch(subject,closure){
- defwhenMap=[:],otherwise=null
- closure.when={map->whenMap.putAll(map)}
- closure.otherwise={otherwise=it}
- closure.resolveStrategy=Closure.
DELEGATE_FIRST- closure()
- defresult=whenMap.find{condition,
value->subjectincondition}- returnresult?result.value:otherwise
- }
- defmanufacturer(car){
- match(car){
- when"Focus":"Ford"
- when"Navigator":"Lincoln"
- when"Camry":"Toyota"
- when"Civic":"Honda"
- when"Patriot":"Jeep"
- when"Jetta":"VW"
- when"Ceyene":"Porsche"
- when"Outback":"Subaru"
- when"520i":"BMW"
- when"Tundra":"Nissan"
- otherwise"Unknown"
- }
- }
- println"ThePatriotismade
by${manufacturer('Patriot')}"- println"TheQQismadeby$
{manufacturer('QQ')}"
以上Ruby case when表达式代码在Groovy 1.6下编译通过。
转载请说明出处
知优网 » Ruby case when表达式实际应用解析
知优网 » Ruby case when表达式实际应用解析