8

私はScalaで次のようにJavaで行うことをしたいと思います。

public void recv(String from) {
    recv(from, null);
}
public void recv(String from, Integer key) {
    /* if key defined do some preliminary work */
    /* do real work */
}

// case 1
recv("/x/y/z");
// case 2
recv("/x/y/z", 1);

Scalaでは次のことができます。

def recv(from: String,
         key: Int = null.asInstanceOf[Int]) {
    /* ... */
}

しかし、それは醜いように見えます。または私はすることができます:

def recv(from: String,
         key: Option[Int] = None) {
    /* ... */
}

しかし今、キーで呼び出すのは醜いようです:

// case 2
recv("/x/y/z", Some(1));

適切なScalaの方法は何ですか?ありがとうございました。

4

3 に答える 3

17

Option方法は Scalaの方法です。ヘルパー メソッドを提供することで、ユーザー コードをもう少し良くすることができます。

private def recv(from: String, key: Option[Int]) {
  /* ... */
}

def recv(from: String, key: Int) {
  recv(from, Some(key))
}

def recv(from: String) {
  recv(from, None)
}

null.asInstanceOf[Int]ちなみに評価し0ます。

于 2012-01-23T14:01:48.017 に答える
3

Option本当にあなたの問題に対する正しい解決策のように聞こえます-あなたは本当に「オプション」が欲しいですInt.

発信者が を使用しなければならないことを心配している場合はSome、次の理由があります。

def recv(from: String) {
  recv(from, None)
}

def recv(from: String, key: Int) {
  recv(from, Some(key))
}

def recv(from: String, key: Option[Int]) {
  ...
}
于 2012-01-23T14:02:00.957 に答える
2

もちろん、適切な方法は を使用することOptionです。見た目に問題がある場合は、いつでも Java で行ったことに頼ることができます: を使用しますjava.lang.Integer

于 2012-01-23T14:00:19.187 に答える