Scala で変数が設定されているかどうかをテストして確認するにはどうすればよいですか。PHP では isset() を使用します。
キーが配列に設定されているかどうかを確認する方法を探しています。
Scala で変数が設定されているかどうかをテストして確認するにはどうすればよいですか。PHP では isset() を使用します。
キーが配列に設定されているかどうかを確認する方法を探しています。
PHPとScalaは非常に異なるため、直接同等のものはありません。まず第一に、Scalaは(final
Javaの世界では)不変の変数を促進するので、通常、常に設定される変数を目指します。
あなたはチェックすることができますnull
:
var person: Person = null
//...
if(person == null) {//not set
//...
}
person = new Person()
if(person == null) {//set
//...
}
しかし、それは悪い習慣です。最も慣用的な方法は、次を使用することOption
です。
var person: Option[Person] = None
//...
if(person.isDefined) {//not set
//...
}
person = Some(new Person())
if(person.isDefined) {//set
//...
}
繰り返しますが、使用isDefined
は最も慣用的な方法ではありません。map
パターンマッチングを検討してください。
まず、Array
Scala にはキーがありません。それらにはインデックスがあり、すべてのインデックスには値があります。ただし、これらの値がどのように初期化されるかについては、以下の編集を参照してください。
あなたはおそらくMap
キーを持っていることを意味します。isDefinedAt
またはを使用して、キーが存在するかどうか (したがって、値が存在するかどうか) を確認できますcontains
。
map isDefinedAt key
map contains key
両者の間に実質的な違いはありません。ここで、Scala が の使用を好むことが編集でわかりOption
ます。マップを処理するときに、まさにそのような方法があります。これを行う場合:
map get key
キー (したがって、値) が存在しない場合は、 Option
back が返されます。None
編集
これが元の答えです。質問がこれに関するものではないことに気付きました。
実際問題として、JVM のすべてのフィールドは JVM 自体によって事前に初期化され、ゼロになります。実際には、すべての参照フィールドは最終的に を指しnull
、ブール値は で初期化されfalse
、他のすべてのプリミティブはバージョン 0 で初期化されます。
Scala には「未定義」フィールドなどというものはありません。そのようなものを書くことさえできません。と書くこともできますがvar x: Type = _
、それは単純に JVM 初期化値になります。null
意味のあるところでは uninitialized を表すために使用できますが、慣用的な Scala コードはそうするのを避けようとします。
値が存在しない可能性を示す通常の方法は、 を使用することOption
です。値がある場合は、 が得られSome(value)
ます。そうしないと、 が得られますNone
。Option
を使用するさまざまな方法については、他のスタック オーバーフローの質問を参照してくださいvariable.isDefined
。
var
最後に、慣用的な Scala コードはあまり使用しないことに注意してくださいval
。つまり、何かを設定するのではなく、その値を別の値に設定して新しいコピーを作成します。