2020/03/19
- 病院 o
- 彼岸 o
- 保険 o
- 英単語10words x
- リスニング o
- Scala o
Scala
ケースクラス
ケースクラスは不変なデータを作るのに適している.
ケースクラスをインスタンス化する際にキーワードnew
が使われていない.これはcase
がapply
メソッドを標準で持っているため.ケースクラスのパラメータはパブリックのval
となるため,再代入はできない(var
も使うことはできるが非推奨).ケースオブジェクトも存在.ケースクラスと同様の性質を持つ.
同値性
そのオブジェクトの中身が同じものであるかどうかを判断する性質.ケースクラスはequal
のようなメソッドを使わなくとも良い.単純なclass
から生成されたインスタンスのオブジェクトの中身を==
によって比較できるようにするにはequals
メソッドをovarride
するなどをして実現することができる.
sealed
宣言されたファイルの中でしか利用することができないクラスであることを表すキーワード.enum
の代わりに使用されるとのこと.
トレイト
クラスに対して振る舞いを追加するために使われる.
自分型アノテーション
クラスやトレイトの中で自分自身の型にアノテーションを記述することができる機能.
抽象トレイトを指定し,後から実装を追加する.
trait Greeter { def greet(): Unit = { println("Hi!") } } trait Person { self: Greeter => // ここの部分が自分型アノテーション def meet(): Unit = greet() override final def toString = "Person" }
これは,ミックスインされて初めて利用できるようになる.上記のコードではextends Greeter
としていないがエラーは出ないことに注目.
この状態では,
val p: Person = new Person with Greeter p.meet() // "Hi!" p.greet() // ERROR
となる.Personはgreet()
を持っているわけではない.
意味がわからなかったのが自分型は型の循環参照を許すというところ.もう少し調べる必要がありそう.