2015-05-30 103 views
1

我試圖(0到9),其可以由3或5Groovy的 - 列出薩姆

方法1被劃分總結在範圍內的所有的數字:

def result = (0..9).findAll { 
     (it % 3 == 0 || it % 5 == 0) 
    }.sum() 
    println result 

打印23這是預期的。

方法2:同上。但我試圖忽略一個臨時變量result &直接打印。

println (0..9).findAll { 
     (it % 3 == 0 || it % 5 == 0) 
    }.sum() 

打印[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

這到底是怎麼回事?爲什麼在方法2中顯示整個列表而不是總數。

方法3:與方法2相同。直接打印。但是將範圍移至一個變量。

def lst = 0..9 
    println lst.findAll { 
     (it % 3 == 0 || it % 5 == 0) 
    }.sum() 

再次打印23。

不Groovy的期望我有一個臨時變量總是:(??

回答

5

Groovy的解析器認爲你正在做

println (0..9) 

,然後做它的其餘部分以println的結果

只要給解析器伸出援助之手外的括號

println((0..9).findAll { 
    (it % 3 == 0 || it % 5 == 0) 
}.sum()) 
+2

'Groovy的面值ser認爲你在做println(0..9)'。是的,但是爲什麼? –

+0

我試過用()包裝所有東西。有用。但我的問題是 - 爲什麼groovy不這麼認爲,因爲我說給我println lst.findAll ....所以Groovy期望一個變量可以在範圍/列表上工作? – KitKarson

+3

不明白。它是括號。 (0..9)看起來像一個函數調用 –