Scala で、新しい「ケース クラス」を作成するために「new」を使用する必要がない理由は何ですか? しばらく検索してみましたが、答えはありませんでした。
5044 次
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 メソッドを呼び出すメソッドです。
于 2017-12-18T11:26:42.453 に答える