Ruby: attribut Booléen convention de nommage et de l'utilisation
L'apprentissage de ruby. J'ai l'impression que les attributs booléens doivent être nommés comme suit:
my_boolean_attribute?
Cependant, j'obtiens des erreurs de syntaxe lors de la tentative de faire ce qui suit:
class MyClass
attr_accessor :my_boolean_attribute?
def initialize
:my_boolean_attribute? = false
end
end
Apparemment ruby est haïr le "?". Est-ce de la convention? Ce que je fais mal?
Vous devez vous connecter pour publier un commentaire.
Edit: trois ans plus tard; le times, ils sont a-changin'...
Julik réponse est la plus simple et la meilleure façon de lutter contre le problème ces jours-ci:
Ma réponse à la question de départ suivante, pour la postérité...
La version courte:
Vous ne pouvez pas utiliser un point d'interrogation dans le nom d'une variable d'instance.
La version longue:
Prenez, par exemple,
attr_accessor :foo
— c'estsimplement, conceptuellement, un peu de sucre syntaxique pour les éléments suivants:En outre, la question de la marque de suffixe est principalement une convention pour indiquer que la valeur de retour d'une méthode est un booléen.
La meilleure approximation que je peux faire de ce que vous allez par ici...
Dans ce cas, il peut y avoir une affaire à faire pour l'utilisation de
attr_accessor
— après tout, il peut être plus explicite le fait que vous travaillez directement avec un attribut booléen. En général, j'ai enregistrer la question de la marque de suffixe pour quand je suis à la mise en œuvre d'une méthode dont la valeur de retour boolean est basé sur un peu plus complexe que de simplement la valeur d'un attribut.Cheers!
Modifier, deux ans plus tard, après un récent commentaire:
Symboles en Ruby ne pouvez pas avoir de points d'interrogation. Ainsi, les invocations deEdit: pas correcte, il suffit d'utiliser la cité de la syntaxe d'un symbole, par exemple,:my_boolean_attribute?
les deux échouent avec uneNameError
.:"my_attribute?"
SyntaxError
.:"my_boolean_attribute?"
, ou même:"my boolean attribute?"
(bonne chance à l'appel de ce dernier sanssend
si!)La façon la plus simple pour ajouter rapidement une "question de méthode" consiste à utiliser des alias pour votre lecteur méthode
dead
etdead?
, droit? Mais permet uniquement par le biaisdead
?La
attr_accessor
symbole implique que le nom de la variable est@my_boolean_attribute
, c'est ce que vous devriez être en paramètre (pas de symbole).Aussi, vous ne pouvez pas l'utiliser ? pour les variables, juste des noms de méthode.
? est convention pour methodnames, pas les variables. Vous ne pouvez pas utiliser une variable d'instance nommée
@foo?
, cependant, vous pouvez utiliser une variable nommée@foo
et le nom de la (créé manuellement) méthode de lecturefoo?
, si vous vouliez.Singe de correction métaprogrammation - peut-être il peut être plus élégant, ce n'est qu'une ébauche rapide, et je n'ai pas fait la métaprogrammation pour un peu de temps...
Avec cette approche, vous pouvez être SEC et obtenir le bon questionmark trop. Vous avez juste besoin de choisir un meilleur nom que "bool_attr", comme "bool_attr_accessor" ou quelque chose de similaire.
Les définitions que j'ai fait un peu de mauvaise humeur, en un sens, que le point d'interrogation est présente dans le symbole original. Probablement un nettoyant approche serait d'éviter la questionmark dans le nom du symbole et de l'ajouter lors de la définition de la méthode devrait être moins à confusion.
Oh, et j'ai presque oublié d'inclure le lien obligatoire: Voir metaclasses clairement