2017-10-30 14 views
-1

は、これは私のコードです: LongオプションへのIntを変換[int]は

[Long]をLongに変換するにはどうすればよいですか? IdはOptiona [Long] randomLong()で、idはLongでなければなりません。ありがとう!

+2

これは、オプションが「なし」の場合に起こりたいことに大きく依存します。 PS:あなたが私たちに示したコードには、 'Option [Int]'型のものはありません。おそらく間違ったコードを投稿しましたか?また、正確なエラーメッセージを投稿してください。 – sepp2k

+0

ありがとうございました! UserEntityにオプションがある場合、私はすでにそれを見ました... –

+0

上記の詳細を明確にするために質問を編集します、ありがとう! –

答えて

2

なしケースに与えるものをお使いの場合には知らないが、私はに通常の方法をカバーしますOptionを扱う。 Optionは、Javaのnullが解決するのと同じ問題を解決しますが、より良い、より安全で、使いやすくなるような方法でこれを行います。だからここで仮想関数を使って作業するつもりですが、ちょうどOption[A]を受け取りました。あなた自身に質問する必要がある質問は、Noneが得られたらどういう意味ですか? Scalaでは、この質問をする必要があります。すべてのクラス型を暗黙的にnullにすることはできません(Javaのように)。

オプション1:静か

エラーの伝播おそらくNoneたちはからAを得たところで失敗したことを示します。何かが間違っていた、ランダムジェネレータが失敗した、多分私たちはゼロで割った。それから我々は失敗したことを示したい。この場合、関数の戻り値の型をAからOption[A]に変更し、Noneを返します。

Javaでは、これは次のようになります。 Scalaで

if (arg == null) 
    return null; 
return doSomething(arg); 

arg map { x => doSomething(x) } 

argNoneある場合、これはNoneを返します。 argに値が含まれている場合は、値にdoSomethingを実行し、結果をOption[A]の中に返します。

オプション2: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] 
} 

オプション3:Noneは単にデフォルト時々

Noneはちょうど私たちは、デフォルト値を使用することを示しています。複数の数値を加算し、そのうちのいくつかがNoneである場合は、を数値0と同じにして、結果を変更しないようにします。

Javaでは、私たちが書くかもしれませんが、Scalaで

int x = 0; 
if (arg != null) 
    x = arg; 
return doSomething(x); 

は、我々はgetOrElseをより簡潔にこれを行うことができます。

doSomething(arg.getOrElse(0)) 

オプション4:大声

エラーの伝播たぶん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) 
} 
+0

ありがとうございます!私はそれをさらに理解した!私は言語から始まっている! –

0

使用取得したり、他の、私はあなたのコードで問題がある場所を正確に私はよく分からない

var user : UserEntity = new UserEntity(
     id = id.getOrElse(0l) 
     username = username, 
     password = password) 
    return user} 
1

問題は、あなたがのタイトルと本文に記載しました通り、あなたがOption[Int]を持っており、(Intが必要だということではありませんあなたの質問)。 Intがあり、Option[Int]が必要です。これは、userInfoIntであるが、UserEntityOption[Int]であるためです。

この問題を解決するには、Some(id)を引数として渡すだけです。

関連する問題