创建字符串时的 Elvis 运算符
Elvis operator when creating strings
我开始学习了Groovy我来到了这个例子:
message = 'Hello' + userService.getLoggedInUser()?.firstName ?: 'Anonymous'
message += '!'
当 getLoggedInUser
方法 return null
时,我们希望该消息具有值 Hello Anonymous
。但是对于上面的示例,当方法 return 为空值时 message
的值是 Hello null
。
这个例子有效:
message = 'Hello'
message += userService.getLoggedInUser()?.firstName ?: 'Anonymous'
message += '!
为什么第一个示例不起作用?
它发生是因为 operator precedence(第一个点,然后 +
,然后 ?:
)
这会起作用:
message = 'Hello' + (userService.getLoggedInUser()?.firstName ?: 'Anonymous')
message += '!'
或者更好地使用 GString:s 而不是连接:
message = "Hello ${userService.getLoggedInUser()?.firstName ?: 'Anonymous'}!"
我开始学习了Groovy我来到了这个例子:
message = 'Hello' + userService.getLoggedInUser()?.firstName ?: 'Anonymous'
message += '!'
当 getLoggedInUser
方法 return null
时,我们希望该消息具有值 Hello Anonymous
。但是对于上面的示例,当方法 return 为空值时 message
的值是 Hello null
。
这个例子有效:
message = 'Hello'
message += userService.getLoggedInUser()?.firstName ?: 'Anonymous'
message += '!
为什么第一个示例不起作用?
它发生是因为 operator precedence(第一个点,然后 +
,然后 ?:
)
这会起作用:
message = 'Hello' + (userService.getLoggedInUser()?.firstName ?: 'Anonymous')
message += '!'
或者更好地使用 GString:s 而不是连接:
message = "Hello ${userService.getLoggedInUser()?.firstName ?: 'Anonymous'}!"