Scalaのクラスのコンストラクタの引数の可視性
valをつけるとattr_reader、varをつけるとattr_accessorになる。(Perl日記だけどRubyで例える)
何もつけないと、privateになる。
// aは何もつけない、bはval、cはvar class Hoge(a: Int, val b: Int, var c: Int) { def getA = a } val hoge = new Hoge(123, 234, 345) // READ hoge.a // error: value a is not a member of Hoge hoge.b //=> 234 hoge.c //=> 345 hoge.getA //=> 123 // WRITE hoge.a = 444 // error: value a is not a member of Hoge hoge.b = 444 // error: reassignment to val hoge.c = 444 //=> 444
ケースクラスの場合は、何もつけないのが上記の普通のクラスのvalにあたる。
case class Bar(a: Int, val b: Int, var c: Int) val bar = Bar(123, 234, 345) // READ bar.a //=> 123 bar.b //=> 234 bar.c //=> 345 // WRITE bar.a = 444 // error: reassignment to val bar.b = 444 // error: reassignment to val bar.c = 444 //=> 444