在groovy switch语句中列出匹配

时间:2017-08-21 09:02:43

标签: groovy

有没有办法在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的结尾)

1 个答案:

答案 0 :(得分:2)

我只是创建一个演示示例,因为猴子补丁是邪恶的。 您可以在运行时修改isCase

当在switch语句中进行groovy调用时,

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复制的。