GroovyのisCaseで正規表現がマッチしない?らしい の続き

GroovyのisCaseで正規表現がマッチしない?らしい | ゲンゾウ用ポストイット の続き。

ヒントをいただく

id:uehaj さんに教えていただきました。いつも教えていただきありがとうございます!

switch (s) { case c: } のとき、分岐の判断時にc.isCase(s) メソッドが呼び出され、その結果が真のときにそのcase 節が実行されます

な、なるほど。

1
2
3
4
5
6
7
8
switch( x ){
    case a:
        break;
    case b:
        break;
    case c:
        break;
}

は、

x.isCase(a)x.isCase(b)x.isCase(c) と評価されていくんじゃなく、 a.isCase(x)b.isCase(x)c.isCase(x)と評価されていくんだ。

コード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def zipCode = "123-4567"
switch (zipCode) {
    case ~/d{3}-d{4}/:
        println "郵便番号"
        break
    default:
        println "他の何か"
        break
}
println((~/d{3}-d{4}/).isCase(zipCode))

実行結果

1
2
郵便番号
true

よかった〜