1

しばらくの間、私はscalaをnullを返す可能性のあるJavaメソッドと統合するのに苦労してきました。私は大いに役立つ次のユーティリティを思いついた:

// produce an Option, nulls become None
object Maybe {
    def apply[T](t:T) = if (t==null) None else Some(t)
}

Maybe(javaClass.getResultCouldBeNull()).map( result => doSomeWork(result) )

このソリューションについていくつか質問があります。

  1. 使用するより良いまたはより標準的なパターンはありますか?
  2. すでに存在するものを複製していますか?
  3. この機能には隠れた落とし穴がありますか?
4

2 に答える 2

8

Scalaの組み込みオプションは、あなたが再発明しようとしているものです。

その場合:

scala> val sOpt: Option[String] = Option(null)
sOpt: Option[String] = None
于 2010-06-01T01:23:34.540 に答える
1

なぜそれからコンパニオンオブジェクト全体を作成するのが面倒なのですか?これは単なる関数なので、関数のように見えるオブジェクトとして実装する必要はありません。

object MyUtilities{
  // a whole bunch of other utilities that you use all over can also be put in this class.
  def maybe[T](t:T) = if (t==null) None else Some(t)
}
于 2010-06-01T01:30:55.187 に答える