Groovy:switch表达式

[size=x-large]Groovy:switch表达式[/size]

在Java里我们只能在switch语句中比较int或枚举类型。在Groovy中我们可以比较任何类型只要这个类型提供了isCase方法。Groovy已经为Class(利用isInstance),Object(利用equals),collections(利用contains)和正则表达式(利用matches),同样我们也可以为自己类实现isCase方法,这样也可以在switch语句中使用。最后我们还可以利用闭包来实现。比较需要返回boolean类型。

def testSwitch(val) {
def result
switch (val) {
case ~/^Switch.*Groovy$/:
result = 'Pattern match'
break
case BigInteger:
result = 'Class isInstance'
break
case 60..90:
result = 'Range contains'
break
case [21, 'test', 9.12]:
result = 'List contains'
break
case [language:"groovy", version:"2.1"]:
result = 'Map containsKey'
break
case 42.056:
result = 'Object equals'
break
case { it instanceof Integer && it < 50 }:
result = 'Closure boolean'
break
default:
result = 'Default'
break
}
result
}

assert 'Pattern match' == testSwitch("Switch to Groovy")
assert 'Class isInstance' == testSwitch(42G)
assert 'Range contains' == testSwitch(70)
assert 'List contains' == testSwitch('test')
assert 'Map containsKey'== testSwitch('language')
assert 'Object equals' == testSwitch(42.056)
assert 'Closure boolean' == testSwitch(20)
assert 'Default' == testSwitch('default')


最后顺便提一下collection上的grep方法。在过滤时也是利用isCase方法实现的:

assert [true] == ['test', 12, 20, true].grep(Boolean), 'Class isInstance'
assert ['Groovy'] == ['test', 'Groovy', 'Java'].grep(~/^G.*/), 'Pattern match'
assert ['b', 'c'] == ['a', 'b', 'c', 'd'].grep(['b', 'c']), 'List contains'
assert [15, 16, 12] == [1, 15, 16, 30, 12].grep(12..18), 'Range contains'
assert [42.031] == [12.300, 109.20, 42.031, 42.032].grep(42.031), 'Object equals'
assert [100, 200] == [10, 20, 30, 50, 100, 200].grep({ it > 50 }), 'Closure boolean'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值