2010-06-01 3 views
1

Некоторое время я изо всех сил старался интегрировать scala с java-методами, которые могут возвращать null. Я придумал следующую утилиту, которая помогает много:Являются ли Maybes хорошим образцом для scala?

// 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. Имеет ли эта функция скрытые gotchas?
+0

Спасибо! Я работал в версии 2.7 и не понимал, что Option.apply() существует в 2.8. –

ответ

8

Scala's встроенный Option - это то, что вы собираетесь изобретать.

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

scala> val sOpt: Option[String] = Option(null) 
sOpt: Option[String] = None 
+0

Он уже знает о классе Option. Ему нужна функция, облегчающая преобразование. –

+0

Я не мог заставить этот код работать на Scala-2.7.5. – Thomas

+0

'val sOpt1: Option [String] = None' и ' val sOpt2: Option [String] = Some ("foo") 'должен это сделать. –

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) 
} 
Смежные вопросы