Boolean expressions
Groovy支持标准的条件运算符的布尔表达式:
1 |
def a = true |
2 |
def b = true |
3 |
def c = false |
4 |
assert a |
5 |
assert a && b |
6 |
assert a || c |
7 |
assert !c |
此外,Groovy中有强制转换非布尔对象为布尔值的特殊规则。
集合
空集合会被强制转换为false:
1 |
def numbers = [ 1 , 2 , 3 ] |
2 |
assert numbers //true, as numbers in not empty |
3 |
numbers = [] |
4 |
assert !numbers //true, as numbers is now an empty collection |
迭代器和枚举
没有进一步元素的枚举和迭代器都会被强制转换为false:
1 |
assert ![].iterator() // false because the Iterator is empty |
2 |
assert [ 0 ].iterator() // true because the Iterator has a next element |
3 |
def v = new Vector() |
4 |
assert !v.elements() // false because the Enumeration is empty |
5 |
v.add( new Object()) |
6 |
assert v.elements() // true because the Enumeration has more elements |
Map
非空的map被强制转换为true:
1 |
assert [ 'one' : 1 ] |
2 |
assert ![:] |
Matchers
当匹配到正则表达式的模式的时候会强制转换为true:
1 |
assert ( 'Hello World' =~ /World/) //true because matcher has at least one match |
Strings
非空的Strings, GStrings 和CharSequences 将被强制转换为true:
1 |
<div> |
2 |
<div> |
3 |
<pre><code data-result= "[object Object]" > // Strings |
4 |
assert 'This is true' |
5 |
assert ! '' |
6 |
//GStrings |
7 |
def s = '' |
8 |
assert !( "$s" ) |
9 |
s = 'x' |
10 |
assert ( "$s" ) |
Numbers
非0的数值被强制转换为true,就如同perl一样。
1 |
<div> |
2 |
<div> |
3 |
<pre><code data-result= "[object Object]" > assert ! 0 //yeah, 0s are false, like in Perl |
4 |
assert 1 //this is also true for all other number types |
Object references
非null的对象引用被强制转换为true:
1 |
assert new Object() |
2 |
assert ! null |