1. ホーム
  2. scala

[解決済み] Scala の Case Classes のオーバーロード・コンストラクタ?

2022-10-03 09:21:20

質問

Scala 2.8では、caseクラスのコンストラクタをオーバーロードする方法はあるのでしょうか?

もしあれば、説明するためのスニペットを入れてください、そうでなければ、理由を説明してください?

どのように解決するのですか?

コンストラクタのオーバーロードは、ケースクラスにとって特別なことではありません。

case class Foo(bar: Int, baz: Int) {
  def this(bar: Int) = this(bar, 0)
}

new Foo(1, 2)
new Foo(1)

しかし、このように apply を省略したときに呼び出されるコンパニオン・オブジェクトのメソッドをオーバーロードすることもできます。 new .

object Foo {
  def apply(bar: Int) = new Foo(bar)
}

Foo(1, 2)
Foo(1)

Scala 2.8では、オーバーロードの代わりに名前付きパラメータやデフォルトパラメータがよく使われるようになりました。

case class Baz(bar: Int, baz: Int = 0)
new Baz(1)
Baz(1)