Являются ли Maybes хорошей моделью для скалы? - PullRequest
1 голос
/ 01 июня 2010

Некоторое время я пытался интегрировать scala с 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. Имеет ли эта функция скрытые ошибки?

Ответы [ 2 ]

8 голосов
/ 01 июня 2010

Встроенная в Scala опция - это то, что вы намереваетесь изобретать заново.

В этом случае:

scala> val sOpt: Option[String] = Option(null)
sOpt: Option[String] = None
1 голос
/ 01 июня 2010

Зачем делать из него целый объект-компаньон? Это просто функция, поэтому вам не нужно реализовывать ее как объект, который выглядит как функция.

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)
}
...