Grails 三元与埃尔维斯的混淆
我有以下代码来处理查找返回null时的默认值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
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”含义的人添加了该信息。