は、これは私のコードです: LongオプションへのIntを変換[int]は
[Long]をLongに変換するにはどうすればよいですか? IdはOptiona [Long] randomLong()で、idはLongでなければなりません。ありがとう!
は、これは私のコードです: LongオプションへのIntを変換[int]は
[Long]をLongに変換するにはどうすればよいですか? IdはOptiona [Long] randomLong()で、idはLongでなければなりません。ありがとう!
なしケースに与えるものをお使いの場合には知らないが、私はに通常の方法をカバーしますOption
を扱う。 Option
は、Javaのnull
が解決するのと同じ問題を解決しますが、より良い、より安全で、使いやすくなるような方法でこれを行います。だからここで仮想関数を使って作業するつもりですが、ちょうどOption[A]
を受け取りました。あなた自身に質問する必要がある質問は、None
が得られたらどういう意味ですか? Scalaでは、この質問をする必要があります。すべてのクラス型を暗黙的にnullにすることはできません(Javaのように)。
エラーの伝播おそらくNone
たちはからA
を得たところで失敗したことを示します。何かが間違っていた、ランダムジェネレータが失敗した、多分私たちはゼロで割った。それから我々は失敗したことを示したい。この場合、関数の戻り値の型をA
からOption[A]
に変更し、None
を返します。
Javaでは、これは次のようになります。 Scalaで
if (arg == null)
return null;
return doSomething(arg);
、
arg map { x => doSomething(x) }
arg
がNone
ある場合、これはNone
を返します。 arg
に値が含まれている場合は、値にdoSomething
を実行し、結果をOption[A]
の中に返します。
None
は異なる挙動を示し、おそらくNone
たちは機能が異なる動作をすることを、ある意味では、示しています。 Javaでは、これは次のようになります。
if (arg != null) {
return doSomething(arg);
} else {
return doSomethingElse();
}
Scalaでは、これを型保証された方法で行います。
arg match {
case None => doSomethingElse()
case Some(x) => doSomething(x) // Note that x is A, not Option[A]
}
None
は単にデフォルト時々None
はちょうど私たちは、デフォルト値を使用することを示しています。複数の数値を加算し、そのうちのいくつかがNone
である場合は、を数値0
と同じにして、結果を変更しないようにします。
Javaでは、私たちが書くかもしれませんが、Scalaで
int x = 0;
if (arg != null)
x = arg;
return doSomething(x);
は、我々はgetOrElse
をより簡潔にこれを行うことができます。
doSomething(arg.getOrElse(0))
エラーの伝播たぶんNone
は、我々の場合には本当に悪いです。おそらく、呼び出されたコードにはエラーがあり、私たちはそれを扱うことができません。おそらく私たちの機能はちょうどwaaaayであり、それが失敗すると他のものは失われます。その後、例外を発生させることができます。このアプローチはScalaではあまり慣用的ではないので、上記のいずれかを行うことが理にかなっていない場合にのみ、非常に控えめに使用してください。 Javaでは
、Scalaで
if (arg == null)
throw new RuntimeException("Oops!");
return doSomething(arg);
、
arg match {
case None => sys.error("Oops!")
case x => doSomething(x)
}
ありがとうございます!私はそれをさらに理解した!私は言語から始まっている! –
使用取得したり、他の、私はあなたのコードで問題がある場所を正確に私はよく分からない
var user : UserEntity = new UserEntity(
id = id.getOrElse(0l)
username = username,
password = password)
return user}
問題は、あなたがのタイトルと本文に記載しました通り、あなたがOption[Int]
を持っており、(Int
が必要だということではありませんあなたの質問)。 Int
があり、Option[Int]
が必要です。これは、userInfo
がInt
であるが、UserEntity
はOption[Int]
であるためです。
この問題を解決するには、Some(id)
を引数として渡すだけです。
これは、オプションが「なし」の場合に起こりたいことに大きく依存します。 PS:あなたが私たちに示したコードには、 'Option [Int]'型のものはありません。おそらく間違ったコードを投稿しましたか?また、正確なエラーメッセージを投稿してください。 – sepp2k
ありがとうございました! UserEntityにオプションがある場合、私はすでにそれを見ました... –
上記の詳細を明確にするために質問を編集します、ありがとう! –