by shigemk2

当面は技術的なことしか書かない

Scalaのobjectはclassの別名という超絶雑な理解だった

とりあえずまとめました。

togetter.com

要点

  • classとobjectの違い is 何というと、ここでは挙げられなかったけどclassのシングルトンオブジェクトバージョンがobjcetなのだけれど、objectではコンパニオンオブジェクトが作れる。
  • objectとcase classの違いは、作成されるコンパニオンオブジェクトで提供される関数の数。case classのほうが提供される関数の数はobjectより多い。
  • Function1とかFunction2とかの引数や戻り値にはIntやStringの他に関数も使える
    • コンストラクタを呼んでいるかのようにメソッド経由でインスタンスを生成できるので、newを使う必要がない
    • FunctionNとobject classとは直接は関係がないが、FunctionN(とそこに紐づくスーパークラス、サブクラス)で提供されている関数をobjectやcase classで使うことができる
    • Function1の引数側の型は親クラスへの汎化が許されており、返り値の方は子クラスへの特化(これはAPIの冒頭に書いてある)

参考

Function1のレファレンス

レファレンスの読み方としての共変 反変

qiita.com

classやobjectの参考

Scalaクラスメモ(Hishidama's Scala class Memo)