Accéder aux membres d'un type de données personnalisé en Haskell
Dire que j'ai l'personnalisé suivant le type de données et la fonction en Haskell:
data Person = Person { first_name :: String,
last_name :: String,
age :: Int
} deriving (Eq, Ord, Show)
Si je veux créer une fonction print_age
pour imprimer l'âge de la Personne, comme suit: print_age (Person "John" "Smith" 21)
, comment pourrais-je écrire print_age
pour accéder à l'âge de paramètre? Je suis Orientée Objet gars, donc je suis hors de mon élément ici. Je suis fondamentalement de la recherche de l'équivalent de la Personne.l'âge.
Vous devez vous connecter pour publier un commentaire.
Fonction de l'application est préfixe, donc
age person
correspondrait à laperson.age()
commun en POO langues. Leprint_age
fonction peut être définie pointfree en fonction de la compositionou point-plein
Ce qui est appelé enregistrement de la syntaxe, LYAH a un bon article sur elle (ctrl-f pour l'Enregistrement "syntaxe").
Quand un type de données est défini avec les enregistrements, Haskell définit automatiquement les fonctions avec le même nom que le dossier d'agir comme accesseurs, dans ce cas,
age
est l'accesseur pour le champ age (elle est de typePerson -> Int
), et de même pourfirst_name
etlast_name
.Ces sont normales Haskell fonctions et sont donc appelés comme
age person
oufirst_name person
.Person.age person
. D'autre part, Frege permet d'écrireperson.age
, tout comme dans OO.En plus de la
age
fonction mentionné dans d'autres réponses, il est parfois commode d'utiliser le pattern matching.Il est assez inoffensif extension qui vous permet de passer de la dénomination bits:
...et un autre, vu avec des degrés divers de la méfiance par divers membres de la communauté, ce qui vous permet de sauter dire quels sont les champs que vous souhaitez apporter dans la portée: