-
Notifications
You must be signed in to change notification settings - Fork 0
scala tips : binary operator
Taisuke Oe edited this page Apr 11, 2015
·
1 revision
##Scalaで二項演算子を行頭に置く
Scalaでは、Javaでいうところの文末のセミコロンを省略できて便利ですが、それと引き換えに失ったものがあります。
というと、おおげさですが、単に↓みたいに、二項演算子(この場合、|)を行頭にそろえて書けないということです。
lazy val statement: Parser[Statement] =
ifStatement
| forStatement
| whileStatement
これは何故かというと、行末のセミコロンを省略できるせいで、最初のifStatementの後の改行で式が終わったと判断されてしまい、その次の| forStatementでコンパイルエラーになってしまうからです。
これが問題になるかというと、それほど問題ではないのですが、不便だと感じる場面は時折あります。たとえば、パーザコンビネータを使うときは、読みやすさのために上のように書きたいのですが、それができません。
さて、この問題ですが、二項演算子によってつなげたい一連の式を()で囲むだけ、という実に簡単な方法で対処することができます。たとえば、パーザコンビネータの例だと次のようになります。
lazy val statement: Parser[Statement] = (
ifStatement
| forStatement
| whileStatement
)