2012-08-17 92 views
1

我有當查找返回NULL處理的默認值下面的代碼混淆三元和貓王

def user = User.find('admin') 
    return user?.address?user:null 

這個作品使用Elvis操作符就像當預期

但是:

def user = User.find('admin') 
    return user?.address?:null 

我收到一個異常:

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'true'   with class 'java.lang.Boolean' to class 'com.code.User' 

我曾期待貓王行爲完全像三元運算符....?

謝謝!

+0

其他語言調用?:「null-coalescing」操作符。只有Groovy使用內部笑話名稱「Elvis」運算符。 – 2012-08-17 14:32:47

+1

這一切都很好,但問題不在於其他語言,而且據我所知,Groovy稱它爲貓王操作符。實際上,「無效合併」一詞不會出現[他們網站上的任何地方](https://www.google.com/search?q=site:groovy.codehaus.org+%22null+coalescing%22&tbs=li:1 )。 – 2012-08-17 15:40:54

+0

@Justin我爲那些不熟悉「Elvis op」的人所知的人添加了這個信息。 – 2012-08-18 02:01:31

回答

3

這將返回user如果用戶不爲空,並user.address計算爲true

return user?.address?user:null 

這將返回user.address如果用戶不爲空,並user.address評估爲true

return user?.address?:null 

我認爲user.address是一個布爾?所以,第二個是想從一個方法可能返回布爾你說回報User在定義

0

問題是,當你使用

user?.address?user:null 

返回用戶,如果用戶的地址。當您使用

user?.address?:null 

它試圖返回地址但不用戶實例。