2015-04-08 18 views
4

的第一個參數的值:獲得我想獲得使用第一個參數的值三元表達做類似的三元表達

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

有沒有辦法做到這一點? a是一個運行多次並返回一個列表的代價高昂的函數。如果列表爲空,我需要進行不同的計算。 我想用三元表達來表達它。

我試着這樣做:

String a() 
{ 
    "a" 
} 

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

但是它是相當難看......

+0

請問您能否把它放在更廣的範圍內? – Opal

回答

5

你也許可以把它包裹在一起?

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

它看起來像我想實現的,但一個()可以返回空... – Heschoon

+0

in(dynamic?)groovy'null.with {}作品 – cfrick

+0

你是對的。做得好! – Heschoon

1

不知道是否有可能與三元運算符,但也許記憶化是解決方案:

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

a() ? println(a()) : println("not a") 
1

什麼:

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

不錯,但我想擺脫變量聲明;我不需要a()的值。 – Heschoon

2

可以使用常規收集:

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

如果你對自己擔憂的()返回一個包含空值,你可以使用的findAll列表。

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