1

私はこのようにコンパニオンオブジェクトにファクトリメソッドをまとめるのにこれまでずっと費やしてきました:

class Stuff(val a: Int, val b: Long) { this() = this(0,0L) }

object Stuff {
  def apply(a:Int, b:Int) = new Stuff(a, b.toLong)
}

しかし、私がそれを殺していると思ったとき、私はコンパイルに行きましたが、これはうまくいきませんでした:

val widget = new Stuff(1,2)

何が起こっている!?これ作っただけ!? ヘルプ!!!

4

1 に答える 1

7

若い Scala コーダーの皆さん、答えは簡単なので恐れる必要はありません。工場を正しく使用していません。ほら、このコードは実際にあなたが望むことをします:

val widget = Stuff(1,2)
//makes Stuff(1, 2L)

ここでの問題は構文です。呼び出すnewと、 の新しいクラスがインスタンス化されますStuff。しかし、これapplyは本当にシンタックス シュガーでwidget.apply(1,2)あり、それ以上のことはありません。

applyシュガーについては、こちらからも学ぶことができます: Scala の apply() メソッド マジックはどのように機能しますか?

若いものをコーディングし続けます。

于 2012-08-22T05:47:23.337 に答える