初学者向けの Scala Tips (7) - objectで名前空間を作る
たとえば、プログラミング言語のパーザを書いていて、プログラムの木構造を次のように表現したいとします。
sealed trait Expression case class Addition(lhs: Expression, rhs: Expression) extends Expression case class Subtraction(lhs: Expression, rhs: Expression) extends Expression case class Multiplication(lhs: Expression, rhs: Expression) extends Expression case class Division(lhs: Expression, rhs: Expression) extends Expression case class Number(value: Int) extends Expression
これで問題はないのですが、Expressionはよく使われる単語なので、プログラムの他の部分と衝突する可能性があります。幸いScalaにはpackageがあるので、
package ast sealed trait Expression extends Expression case class Addition(lhs: Expression, rhs: Expression) extends Expression case class Subtraction(lhs: Expression, rhs: Expression) extends Expression case class Multiplication(lhs: Expression, rhs: Expression) extends Expression case class Division(lhs: Expression, rhs: Expression) extends Expression case class Number(value: Int) extends Expression
とすることは可能ですが、もっとわかりやすい方法として、objectで包むという方法が考えられます。上の定義をobjectを使って書き換えると、
object Ast { sealed trait Expression case class Addition(lhs: Expression, rhs: Expression) extends Expression case class Subtraction(lhs: Expression, rhs: Expression) extends Expression case class Multiplication(lhs: Expression, rhs: Expression) extends Expression case class Division(lhs: Expression, rhs: Expression) extends Expression case class Number(value: Int) extends Expression }
のようになります。参照するときは、Ast.Expression、Ast.SubtractionのようにすればOKです。
ではでは。