0

Scala で変数が設定されているかどうかをテストして確認するにはどうすればよいですか。PHP では isset() を使用します。

キーが配列に設定されているかどうかを確認する方法を探しています。

4

2 に答える 2

6

PHPとScalaは非常に異なるため、直接同等のものはありません。まず第一に、Scalaは(finalJavaの世界では)不変の変数を促進するので、通常、常に設定される変数を目指します。

あなたはチェックすることができます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パターンマッチングを検討してください。

于 2012-06-26T17:19:34.470 に答える
6

まず、ArrayScala にはキーがありません。それらにはインデックスがあり、すべてのインデックスには値があります。ただし、これらの値がどのように初期化されるかについては、以下の編集を参照してください。

あなたはおそらくMapキーを持っていることを意味します。isDefinedAtまたはを使用して、キーが存在するかどうか (したがって、値が存在するかどうか) を確認できますcontains

map isDefinedAt key
map contains key

両者の間に実質的な違いはありません。ここで、Scala が の使用を好むことが編集でわかりOptionます。マップを処理するときに、まさにそのような方法があります。これを行う場合:

map get key

キー (したがって、値) が存在しない場合は、 Optionback が返されます。None

編集

これが元の答えです。質問がこれに関するものではないことに気付きました。

実際問題として、JVM のすべてのフィールドは JVM 自体によって事前に初期化され、ゼロになります。実際には、すべての参照フィールドは最終的に を指しnull、ブール値は で初期化されfalse、他のすべてのプリミティブはバージョン 0 で初期化されます。

Scala には「未定義」フィールドなどというものはありません。そのようなものを書くことさえできません。と書くこともできますがvar x: Type = _、それは単純に JVM 初期化値になります。null意味のあるところでは uninitialized を表すために使用できますが、慣用的な Scala コードはそうするのを避けようとします。

値が存在しない可能性を示す通常の方法は、 を使用することOptionです。値がある場合は、 が得られSome(value)ます。そうしないと、 が得られますNoneOptionを使用するさまざまな方法については、他のスタック オーバーフローの質問を参照してくださいvariable.isDefined

var最後に、慣用的な Scala コードはあまり使用しないことに注意してくださいval。つまり、何かを設定するのではなく、その値を別の値に設定して新しいコピーを作成します。

于 2012-06-26T17:36:07.820 に答える