Groovy上的三值快捷方式
我知道三元运算符本身已经是一种快捷方式,但我仍然想知道在Groovy上的三值快捷方式,groovy,Groovy,我知道三元运算符本身已经是一种快捷方式,但我仍然想知道在groovy中是否有这样的快捷方式: String typeFilter = (params?.type) ? params.type : "" 我想做的是: 如果HashMapparams有一个type键,将该键的值分配给typeFilter,否则,用空字符串分配typeFilter 我在考虑是否可以避免键入params?.type两次,或者这是给定场景中最短的代码?感谢您的反馈。您刚才有效地描述了elvis操作员: String ty
groovy
中是否有这样的快捷方式:
String typeFilter = (params?.type) ? params.type : ""
我想做的是:
如果HashMap
params
有一个type
键,将该键的值分配给typeFilter
,否则,用空字符串分配typeFilter
我在考虑是否可以避免键入
params?.type
两次,或者这是给定场景中最短的代码?感谢您的反馈。您刚才有效地描述了elvis操作员:
String typeFilter = params.type ?: ""
更多信息请点击此处:
只需确保您了解常规真理()
尤其是当涉及到0
vsnull
vsempty
的值时。考虑这一点:
params.age = 0
...
// elsewhere in the code
params.age = params.age ?: 6 // if no age provided default to 6
这将把
参数age设置为6
,尽管if已经用0
初始化 虽然@defectus提供的答案大体正确,但也有一些极端情况。考虑下面的例子:
def s = ''
def r = s.empty ?: 'notempty'
assert r == true
在上面的示例中,返回的是true
,而不是空字符串。对一些人来说,这可能是显而易见的,但当我不久前面对它时,这是一个真正的问题;) 您是否考虑过键type
具有空值的拐角情况?如果发生这种情况,Elvis操作员将返回RHS。这可能与您试图实现的目标无关,但不符合您的要求(字面意思):
如果HashMap
params
有一个type
键,将该键的值分配给typeFilter
,否则,用空字符串分配typeFilter
例子。(为了使输出更清晰,我使用了“none”而不是空字符串。)
嘿,第一次听到它。。。为什么叫它Elvis
operator?因为发型。@Opal哇!我没有注意到?:
符号!谢谢你的关心。。。显然,我已经把错误陷阱和过滤器放在了上面的代码行之前,我只是没有把它包括在问题中。
println( [:].type ?: 'none' )
=> none
println( [type: 42].type ?: 'none' )
=> 42
// But do you want null or 'none' in this case?
println( [type: null].type ?: 'none' )
=> none