Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails 三元与埃尔维斯的混淆_Grails_Groovy - Fatal编程技术网

Grails 三元与埃尔维斯的混淆

Grails 三元与埃尔维斯的混淆,grails,groovy,Grails,Groovy,我有以下代码来处理查找返回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.GroovyCastExcep

我有以下代码来处理查找返回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' 
我原以为埃尔维斯的行为和三元运算符一模一样


谢谢

如果用户不为空且
user.address
计算结果为
true
,则返回
user

return user?.address?user:null 
如果用户不为空且
user.address
计算结果为
true,则返回
user.address

return user?.address?:null 

我假设
user.address
是一个布尔值?因此,第二个函数试图返回一个布尔值,可能来自一个方法,您在定义中说返回一个
用户
,如果用户不为null且
用户
,则返回
用户。address
的计算结果为
true

return user?.address?user:null 
如果用户不为空且
user.address
计算结果为
true,则返回
user.address

return user?.address?:null 

我假设
user.address
是一个布尔值?因此,第二个函数试图返回一个布尔值,可能来自一个方法,您在定义中说返回一个
用户
,问题是当您使用

user?.address?user:null
user?.address?:null 
如果用户有地址,则返回用户。当你使用

user?.address?user:null
user?.address?:null 

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

问题在于使用

user?.address?user:null
user?.address?:null 
如果用户有地址,则返回用户。当你使用

user?.address?user:null
user?.address?:null 

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

其他语言调用?:空合并运算符。只有Groovy使用了一个笑话中的名字“Elvis”操作符。这很好,但问题不在于其他语言,据我所知Groovy总是称它为Elvis操作符。事实上,短语“null coalescing”没有出现。@Justin我为不熟悉“Elvis op”含义的人添加了该信息。其他语言调用?:“null coalescing”操作符。只有Groovy使用了一个笑话中的名字“Elvis”操作符。这很好,但问题不在于其他语言,据我所知Groovy总是称它为Elvis操作符。事实上,短语“空合并”并没有出现。@Justin我为任何不熟悉“猫王op”含义的人添加了该信息。