看起来在版本4中groovy把语句变成了表达式,但是这段代码仍然不能工作,为什么?
def v = if (1 < 2) { true } else { false } println(v)
js81xvg61#
我不知道你指的是什么,但如果我不得不猜测它会是switch表达式?简短的答案是,仅仅因为switch得到了一个makeover并不意味着if也得到了。另外,我们已经有了一个更紧凑的三元运算符语法:
switch
if
def v = 1 < 2 ? true : false println( v )
因此,将if从语句转换为表达式与现有语法相比几乎没有什么改进。此外,您还拥有使用Groovy自己完成此任务所需的一切:
def <T> T test( def expr, Closure<T> truthExpression, Closure<T> falseExpression = null ) { if( expr ) { return truthExpression.call() } else { return falseExpression.call() } } def result = test( x < 1, { y + 10 }, { z + 100 } )
你可以通过一个类和method chaining来使用它,这样你就可以有一个类似DSL的方法:
def result = test( x < 1 ) then { y + 10 } else { z + 100 }
此时,几乎没有理由将if重构为表达式,因为您可以使用今天的Groovy(从技术上讲也是昨天的Groovy)做几乎完全相同的事情。
1条答案
按热度按时间js81xvg61#
我不知道你指的是什么,但如果我不得不猜测它会是switch表达式?简短的答案是,仅仅因为
switch
得到了一个makeover并不意味着if
也得到了。另外,我们已经有了一个更紧凑的三元运算符语法:因此,将if从语句转换为表达式与现有语法相比几乎没有什么改进。
此外,您还拥有使用Groovy自己完成此任务所需的一切:
你可以通过一个类和method chaining来使用它,这样你就可以有一个类似DSL的方法:
此时,几乎没有理由将
if
重构为表达式,因为您可以使用今天的Groovy(从技术上讲也是昨天的Groovy)做几乎完全相同的事情。