Scala: comment initialiser un objet à l'aide des valeurs par défaut
Je pense que ce sera mieux expliqué par un exemple
J'ai le cas suivant classe
case class Person(name: String = "no name", surname: String = "no surname")
Et je veux faire une fonction générale à remplir à partir, par exemple, un message json, qui ne peut pas spécifier tous les champs
Je sais que pour utiliser les valeurs par défaut la réponse la plus simple est de ne pas passer pour le constructeur, mais si j'ai plusieurs champs qui peuvent ou peuvent ne pas apparaître dans le json, je devrait avoir à utiliser un énorme interrupteur phrase couvrant toutes les combinaisons possibles de paramètres manquants. Dans ce cas, après la lecture du json, je devrais prendre soin de nom & prénom présent, pas de nom, pas de nom de famille et pas de nom ni de prénom... (ben, j'espère que je me suis fait clair).
Pour être plus précis, je suis en train de développer une fonction qui me permet de créer une personne de la followgin json valeurs, en utilisant les valeurs par défaut lorsqu'il y a un certain nombre de paramètres manquants
{ "name": "john", "surname": "doe" }
{ "surname": "doe" }
{ "name": "john" }
{ }
C'est pourquoi je suis à la recherche d'une façon plus générale pour gérer cela.
(Je vais vous montrer quelques pseudo-code pour donner une idée de ce que je suis en train de réaliser)
Je pensais à quelque chose comme:
val p = Person(name= "new person name", surname= Unit)
Et dans ce cas, le prénom doit obtenir la valeur par défaut
Ou quelque chose comme
val p = Person( Map( "name" -> "new person name" ) _* )
De sorte qu'il prend également la valeur par défaut pour le nom de famille
Ou peut-être de le faire dans le constructeur, si je détecte une valeur null (ou sans), j'ai pu affecter la valeur par défaut.
En fait, j'essaie d'éviter de répéter la définition des valeurs par défaut.
De toute façon, ce qui serait le plus idiomatique façon à atteindre une telle chose?
OriginalL'auteur opensas | 2012-05-06
Vous devez vous connecter pour publier un commentaire.
Si vous voulez que la valeur par défaut à utiliser, vous normalement il suffit de laisser hors de cet argument nommé:
Mais, puisque vous voulez explicitement savoir si une valeur par défaut ou pas, vous pouvez mettre en œuvre votre Carte basée sur l'idée dans un constructeur. Si vous ne voulez pas de répéter les valeurs par défaut, comment au sujet de ces deux options:
Option 1: Extériorisés des constantes pour les valeurs par défaut
Définir les valeurs par défaut de l'extérieur. Utiliser à la fois le constructeur et la Carte basée sur le constructeur.
Utilisation:
Option 2: Optionified suppléant constructeur
Vous pouvez trouver cela un peu plus propre, car il ne repose pas sur externalisés constantes. Le seul inconvénient est que si vous voulez construire avec seulement certains paramètres, vous devez envelopper chacun dans
Some()
.Utilisation:
Je vois maintenant. J'ai mis à jour avec deux options qui pourraient être ce que vous cherchez.
super réponse, je pense que je préfère la première approche, la définition de la des constantes dans la Personne compagnon objet, juste pour les rendre un peu moins externe...
+1 Pour l'option #1. Je pense que l'option n ° 2 est
Option
abus, cependant.+1 pour l'option #1 ainsi, l'utilisation créative de l'alt constructeur avec la Carte param. json ou servlet params un ajustement parfait ici, merci
OriginalL'auteur
Je pense que cela pourrait être un cas d'utilisation pour Soit. Vous pouvez spécifier un ou l'autre de deux types.
Maintenant, vous pouvez vérifier si vous avez une Gauche ou une Droite et d'appeler le constructeur avec les arguments que vous voulez.
OriginalL'auteur