2011-05-20 47 views
2

我想知道的是有以下任何代碼更巧妙的辦法:常規方式,如果(VAR)FN(VAR)

def dataList = OperLog.createCriteria().list(max:params.max, offset:params.offset) { 
    if(params.relationId){ 
     eq('relationId',params.long('relationId')) 
    } 
    order(params.sort, params.order) 
} 

如someVar .someMethod 是那裏不叫任何糖在那裏的PARAMS的方法是空

+0

我做的完全一樣的.... :-D – Grooveek 2011-05-20 14:55:02

回答

5

你可以這樣做:

params.relationId?.with { rid -> 
    println rid 
} 

而且with塊內的代碼,如果params.relationIdnull將不會被執行...

但是,我認爲你的原始代碼在意圖上更加明顯,當你稍後審查它時,你將不必去試着弄清楚它在做什麼; - )

+0

應該指出的是,由於「常規真理」,一個空字符串,零int或false布爾值將通過這個測試,所以with語句會執行。這與條件示例的行爲不同。只有當這個值爲null時,這兩個結構纔是可比較的(另一個原因是堅持使用if語句):-) – 2011-05-20 18:06:28

0

有沒有這種更潮流的風格?

def list = [vo1,vo2,vo3] 
list.each{ 
    someMethod(it) 
} 

就像

list*.toString()