获取三元表达式的第一个参数的值

时间:2015-04-08 10:32:22

标签: groovy

我想在三元表达式中使用第一个参数的值来执行以下操作:

a() ? b(value of a()) : c

有办法做到这一点吗? a是一个运行多次且返回列表的代价很高的函数。如果列表为null,我需要进行不同的计算。 我想用三元表达来表达它。

我尝试过这样的事情:

String a()
{
    "a"
}

def x
(x=a()) ? println(x) : println("not a")

但这很难看......

4 个答案:

答案 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