Groovy不在collections
看看列表中是否有东西的常规方法是使用“in”
if('b' in ['a','b','c'])
但是,您如何很好地了解某件东西是否不在集合中?
if(!('g' in ['a','b','c']))
似乎凌乱和“!” 隐藏在随便的一瞥中。 有没有更习惯性的常规方式来做到这一点?
谢谢!
不幸的是,我认为没有一个漂亮的语法。 但是你可以使用一个辅助variables来使其更具可读性:
def isMagicChar = ch in ['a', 'b', 'c'] if (!isMagicChar) ...
或者,在这种情况下,你可以使用正则expression式:)
if (ch !=~ /[abc]/) ...
另一种编写方式是使用contains
,例如
if (!['a', 'b', 'c'].contains('b'))
它以一个方法调用代替操作符的代价节省了额外的括号。
你可以添加新的function:
Object.metaClass.notIn = { Object collection -> !(delegate in collection) } assert "2".notIn(['1', '2q', '3']) assert !"2".notIn(['1', '2', '3']) assert 2.notIn([1, 3]) assert !2.notIn([1, 2, 3]) assert 2.notIn([1: 'a', 3: 'b']) assert !2.notIn([1: 'a', 2: 'b'])
更可读,我不确定:
assert ['a','b','c'].any{it == 'b'} assert ['a','b','c'].every{it != 'g'}
举个例子:
if (['a','b','c'].every{it != 'g'})
几个月前,我提出了一个新的操作符重载! ( 不是运营商) 。 现在,也许你可以使用任何奇数的感叹号;)
if(!!!('g' in ['a','b','c']))
根据Grails关于在这里创build标准的文档,你可以使用像这样的东西:
not {'in'("age",[18..65])}
在这个例子中,你有一个名为"age"
的属性,你想得到[18..65]
18到65之间的行。当然, [18..65]
部分可以用你需要的值或范围的任何列表来代替。