あぁ、あなたはなんてエレガントなのでしょう。。。
昨日まではこんなコード。処理するタグが増えるたびにcase文を書いていたので、なんだかなー、と思ってました。
val xml = new XMLEventReader(Source.fromFile(file)) for(event <- xml){ event match { case EvElemStart(_,"uicontrol",attrs,_) => { doSomething("uicontrol", attrs) } case EvElemStart(_,"wintitle",attrs,_) => { doSomething("wintitle", attrs) } } }
パターンマッチングに正規表現がそのまま渡せるなんて知らなかったんです。 しかもマッチングしたグループを自動的に変数に代入してくれるだなんて。
val xml = new XMLEventReader(Source.fromFile(file)) val inlineTags = """^(uicontrol|wintitle)$""".r for(event <- xml){ event match { case EvElemStart(_,inlineTags(tagName),attrs,_) => { doSomething(tagName, attrs) } } }
恐らくこの感動はScala初心者のうちしか味わえない! と思い、残しておきます。