在Groovy中,else条件是表达式还是语句?

mznpcxlj  于 2023-03-22  发布在  其他
关注(0)|答案(1)|浏览(147)

看起来在版本4中groovy把语句变成了表达式,但是这段代码仍然不能工作,为什么?

def v = if (1 < 2) { true } else { false }
println(v)
js81xvg6

js81xvg61#

我不知道你指的是什么,但如果我不得不猜测它会是switch表达式?简短的答案是,仅仅因为switch得到了一个makeover并不意味着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)做几乎完全相同的事情。

相关问题