2010-06-01 12 views
1

Pendant un moment, j'ai eu du mal à intégrer scala avec des méthodes java qui pourraient renvoyer null. Je suis venu avec l'utilitaire suivant qui aide beaucoup:Maybes est-il un bon modèle pour 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)) 

J'ai quelques questions au sujet de cette solution:

  1. Y at-il une meilleure ou plus modèle standard à utiliser? Est-ce que je reproduis quelque chose qui existe déjà?
  2. Cette fonctionnalité a-t-elle des pièges cachés?
+0

Merci! J'ai travaillé dans 2.7 et n'ai pas réalisé que Option.apply() existait dans 2.8. –

Répondre

8

Le Option intégré de Scala est ce que vous essayez de réinventer.

Dans ce cas:

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

Il connaît déjà la classe Option. Il veut une fonction qui facilite la conversion. –

+0

Je ne pouvais pas obtenir ce code pour travailler sur Scala-2.7.5. – Thomas

+0

'val sOpt1: Option [String] = None' et ' val sOpt2: Option [String] = Certains ("foo") 'devraient le faire. –

1

Pourquoi prendre la peine faire un objet compagnon tout hors de lui? C'est juste une fonction, donc vous n'avez pas besoin de l'implémenter comme un objet qui ressemble à une fonction.

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