11
votes

Quelles méthodes Scala renvoient NULL au lieu d'une option et pourquoi?

Je me demande si la bibliothèque standard est complètement null -free et - sinon - serait intéressé quels cas d'utilisation raisonnables existe où retourner null est préférable à renvoyer certains option instance.


2 commentaires

Le seul cas d'utilisation raisonnable pour le retour null est lorsque vous utilisez une bibliothèque qui attend null pour être renvoyé à partir d'un rappel comme indication du "sans résultat". C'est souvent un mal nécessaire lorsqu'il s'agit de bibliothèques héritées Java du code Scala.


En général, les méthodes de la bibliothèque Scala renverront l'option ou lanceront une exception si elles sont appelées inappropriées (par exemple, la tête et la dernière liste). Je n'en sais pas de ce retour NULL.


3 Réponses :


-1
votes

Je ne peux pas penser à une recherche de Google dans l'API (INURL: SCALA-LANG.ORG/API RETOUR + NULL) et il ne semblait pas donner une utilisation documentée de NULL.

Peut-être qu'il existe une utilisation interne de som. Les seules raisons auxquelles je peux penser pour faire ce serait pour éviter le supplément d'un objet ou une intégration facile avec Java. Les deux semblent improbables.


1 commentaires

Étant donné que Scala n'utilise pas retour la plupart du temps, cette recherche ne prendrait pas vraiment beaucoup.



5
votes

Le seul endroit que j'ai vu null code> utilisé dans la bibliothèque standard sont des groupes REGEX facultatifs.

scala> val number = """(\d+)(\.\d+)?""".r // matches digits optionally followed by a . and more digits
number: scala.util.matching.Regex = (\d+)(\.\d+)?
scala> "12" match {
     |   case number(intPart, decimalPart) => (intPart, decimalPart)
     | }
res0: (String, String) = (12,null)


2 commentaires

J'aime beaucoup le fait que Regex devienne automatiquement le matcheur de motif et que, pour 90% des cas que vous souhaiteriez une chaîne directe ; Mais puisque Scala est presque entièrement exempte d'exceptions étranges, cela a peut-être été une bonne idée s'ils utilisaient l'option Option [String] pour la cohérence. Option [String] et / ou Liste se présente fréquemment lors de l'analyse JSON et je ne pense pas que je les éprouve beaucoup depuis que je les utiliserais dans la compréhension.


Conseil @eugene: Si vous spécifiez le type, il ne correspond pas à null . Par exemple, Numéro de cas (intpart: chaîne, décimalpart: chaîne) ne correspond pas à la chaîne ci-dessus.



5
votes

nomsPaceSpaceBinding retourne null Code> Pour l'espace de noms local ou dans le cas suivant une entrée non définie.

$ scala
Welcome to Scala version 2.9.0.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.

scala> (<foo/>).scope.getURI("something")
res0: String = null


1 commentaires

Liée à scala.xml.elem qui prend une valeur string la valeur de préfixe qui devrait être null pour aucun préfixe d'espace de noms. Encore une fois, pourquoi ce n'est pas option [string] est au-delà de moi.