ひょっとしたら役に立つかもしれないScala Tips(3) 二項演算子を行頭に置く
Scalaの場合、パーザコンビネータでパーザ書いてる時によくあることなのだが、読みやすさのために、以下のように行頭に二項演算子を置いて式をつなげたい、ということがしばしばある。
lazy val statement: Parser[Statement] = ifStatement | forStatement | whileStatement
Javaだと(演算子の多重定義ができないので上のような例は無理だが)、条件式を||でつなぐときなどは、同様の書き方ができる。しかし、Scalaの場合、行末の;を省略できる仕様のため、最初のifStatementの後の改行で式が終わったと判断されてしまい、その次の| forStatement
でエラーになってしまう。このような場合、演算子によってつなげたい一連の式を()で囲み、以下のようにすることでエラーを防ぐことができる。
lazy val statement: Parser[Statement] = ( ifStatement | forStatement | whileStatement )