有没有办法在groovy
中实现这样的目标?
def list1 = ['trs', 'file.xlsx', 'xxx']
def list2 = ['rls', 'file.xml', 'yyy']
def switchCheck(list) {
switch (list) {
case ['trs', /* matches pattern *.xlsx */ , /* any value */]:
println "trs message"
break
case ['rls', /* matches pattern *.xml */ , /* any value */]:
println "rls message"
break
default:
println "no match"
break
}
}
switchCheck(list1)
switchCheck(list2)
我想检查switch语句中的列表数据,其中某些字段无关紧要,而其他字段应匹配某种模式(如*.xlsx
或.xml
的结尾)
答案 0 :(得分:2)
我只是创建一个演示示例,因为猴子补丁是邪恶的。
您可以在运行时修改isCase
。
isCase
是方法。(与Java不同)
就这样打电话:
... // You don't need to modify switchCheck method.
def list2 = ['rls', 'file.xml', 'yyy']
List.metaClass.isCase = { Object switchValue ->
if (!switchValue in List && switchValue.size() == 3) {
false
} else {
switchValue.first() == delegate.first() && (switchValue[1]) in ~(createRegexFromGlob(delegate[1]))
}
}
switchCheck(list1)
createRegexFromGlob是从here复制的。