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

Groovy 获取三元表达式的第一个参数的值,groovy,Groovy,我想使用三元表达式中第一个参数的值来执行如下操作: a() ? b(value of a()) : c String a() { "a" } def x (x=a()) ? println(x) : println("not a") 有办法做到这一点吗?是一个需要多次运行且返回列表的函数。如果列表为空,我需要进行不同的计算。 我想用三元表达式来表达它 我试着做一些类似的事情: a() ? b(value of a()) : c String a() { "a" } de

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

a() ? b(value of a()) : c
String a()
{
    "a"
}

def x
(x=a()) ? println(x) : println("not a")
有办法做到这一点吗?是一个需要多次运行且返回列表的函数。如果列表为空,我需要进行不同的计算。 我想用三元表达式来表达它

我试着做一些类似的事情:

a() ? b(value of a()) : c
String a()
{
    "a"
}

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

但这很难看…

不知道三元运算符是否可行,但也许记忆是解决方案:

Closure<String> a = {
    'a'
}.memoize()

a() ? println(a()) : println("not a")
闭包a={
“a”
}.memoize()
a()?println(a()):println(“非a”)
关于:

Something tmp = a()
tmp ? b(tmp) : c

你可以把它包在一个袋子里吗

def result = a().with { x -> x ? "Got $x" : "Nope" }

您可以使用groovy collect:

def result = a().collect { "Got $it" } ?: "Nope"
如果您担心a()返回包含空值的列表,可以使用findAll

def result = a().findAll { it }.collect { "Got $it" } ?: "Nope"

你能把它放在一个更广泛的背景下吗?很好,但我想摆脱变量声明;我不需要a()的值。Nice@tim_yates!看起来很棒:)@Heschoon Groovy 1.8(ish)中有一个bug,
with
不能与
null
一起工作,但我相信它已修复:-)