Perl日記

PerlとかRubyとかPHPとかPythonとか

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