2012-08-17 67 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 

它试图返回地址但不用户实例。