簡単な方法の 1 つは、初期化してnull
. これを行うには、型を指定し、後で変更できるようにArray[Int]
(var
の代わりに) にする必要があります。val
class Foo() {
var array: Array[Int] = null // how do I leave initialization till later?
def initializeArray(size : Int) = array = Array.ofDim[Int](size)
}
ただし、これは Scala ではあまり良い方法ではありません。を使用する方が良いかもしれませんOption
:
class Foo() {
var array: Option[Array[Int]] = None // how do I leave initialization till later?
def initializeArray(size : Int) = array = Some(Array.ofDim[Int](size))
}
これは、 が何にも設定されていない可能性があることをユーザーに明示的に伝え、 sarray
を回避しNullPointerException
ます。Option
詳細については、StackOverflow または他の場所で読むことができます。
最後に、Scala での最良の設計は不変クラスに依存しています。そのような場合、Foo
何を入れたいかが実際にわかるまで、 の作成を延期します。ただし、設計について他に何も知らなければ、これをどのようにセットアップするのが最善かを言うのは困難です.
編集:あなたの説明に基づいて、私はあなたのデザインを2つの部分に分けます.ファイルを解析する方法とFoo
、最終結果を保存するための不変です。
class Foo(array: Array[Int]) {
}
object Foo {
def fromFile() = {
val array: Array[Int] = /* parse file into the right structure */
new Foo(array)
}
}
次に、次のように言うことができます。
val foo = Foo.fromFile(filename)
はfoo
、完全で不変の になりFoo
ます。