18

Scala で、新しい「ケース クラス」を作成するために「new」を使用する必要がない理由は何ですか? しばらく検索してみましたが、答えはありませんでした。

4

3 に答える 3

41

方法または理由が必要ですか? 他の回答が指摘しているように、方法applyは自動生成されたコンパニオン オブジェクトのメソッドにすぎません。

理由: ケース クラスは、Scala で代数データ型を実装するためによく使用されます。また、 -less コンストラクターを使用すると、より洗練された (たとえば、パターン マッチングを介して値を分解するように見える値を作成する) コードが可能になり、ADT によく似たコードになります。他の言語の構文。new

于 2012-08-02T12:32:23.493 に答える
14

Case クラスには、apply()実装済みのコンパニオン オブジェクトが事前に作成されています。誰かがこれについてさえ不平を言っています:ケースクラスコンパニオンで適用をオーバーライドする方法:)

于 2012-08-02T12:17:29.450 に答える
7

ケース クラスは、コンストラクタのように使用できるコンパニオン オブジェクトで自動生成された関数を提供します。 apply

Scalaの逆コンパイルされたバイト コードでは、次のように作成された関数が見つかりますapply

object Person {
def apply(name: String, age: Integer): Person = new Person(name,age)
}

例 :

case class Person(name: String, age: Integer)

次の 3 つはすべて同じことを行います。

val p0 = new Person("Frank", 23) // normal constructor

val p1 = Person("Frank", 23) // this uses apply

val p2 = Person.apply("Frank", 23) // using apply manually

したがってval p1 = Person("Frank", 23) 、コンストラクターではない場合、これは apply メソッドを呼び出すメソッドです。

詳細については、 scala-object-apply-functionsをお読みください。

于 2017-12-18T11:26:42.453 に答える