我想在三元表达式中使用第一个参数的值来执行以下操作:
a() ? b(value of a()) : c
有办法做到这一点吗? a是一个运行多次且返回列表的代价很高的函数。如果列表为null,我需要进行不同的计算。 我想用三元表达来表达它。
我尝试过这样的事情:
String a()
{
"a"
}
def x
(x=a()) ? println(x) : println("not a")
但这很难看......
答案 0 :(得分:5)
你可以把它包装成一个?
def result = a().with { x -> x ? "Got $x" : "Nope" }
答案 1 :(得分:2)
你可以使用groovy collect:
def result = a().collect { "Got $it" } ?: "Nope"
如果您担心a()返回包含空值的列表,可以使用findAll。
def result = a().findAll { it }.collect { "Got $it" } ?: "Nope"
答案 2 :(得分:1)
不知道三元运算符是否可行,但可能是memoization就是解决方案:
Closure<String> a = {
'a'
}.memoize()
a() ? println(a()) : println("not a")
答案 3 :(得分:1)
怎么样:
Something tmp = a()
tmp ? b(tmp) : c