Edit: drei Jahre später; die Zeiten, sie sind a-changin' ...
Julik's answer die einfachste und beste Weg ist, um das Problem in diesen Tagen zu bewältigen:
class Foo
attr_accessor :dead
alias_method :dead?, :dead # will pick up the reader method
end
Meine Antwort auf die ursprüngliche Frage folgt, für die Nachwelt ...
die kurze Version:
Sie können nicht ein Fragezeichen im Namen einer Instanzvariablen verwenden.
Die längere Version:
Nehmen wir zum Beispiel, attr_accessor :foo
- es ist einfach konzeptionell ein bisschen syntaktischer Zucker für die folgenden:
def foo
@foo
end
def foo=(newfoo)
@foo = newfoo
end
Darüber hinaus ist die Fragezeichen Suffix ist meist nur Eine Konvention, die angibt, dass der Rückgabewert einer Methode ein boolescher Wert ist.
Die beste Annäherung ich machen kann, was Sie hier gehen ...
class MyClass
def initialize
@awesome = true
end
def awesome?
@awesome
end
end
In diesem Fall kann ein Fall sein für die Verwendung von attr_accessor
gemacht werden - schließlich kann es ausdrücklich, dass Sie arbeiten direkt mit einem booleschen Attribut. Im Allgemeinen speichere ich das Fragezeichensuffix für die Implementierung einer Methode, deren boolescher Rückgabewert auf etwas komplexeren Bedingungen als nur dem Wert eines Attributs basiert.
Prost!
bearbeiten, zwei Jahre später, nach einer letzten Bemerkung:
- Rubin erzwingt bestimmte Namenskonventionen.
Symbole in Ruby können keine Fragezeichen haben. Somit werden Aufrufe von :my_boolean_attribute?
beide mit einem NameError
fehlschlagen. Edit: nicht korrekt, verwenden Sie einfach die in Anführungszeichen gesetzte Syntax für ein Symbol, z. B. :"my_attribute?"
- Symbole sind unveränderlich, versucht, eine zu zuweisen, wird eine
SyntaxError
werfen.
Normalerweise verwendet Rubyist weder in Variablennamen noch in Methodennamen das Präfix is_. Einfach super? statt is_awesome? –
Guter Punkt, wirppos. Editiert das 'is_', um die Nachwelt zu verwirren ;-) –
Von dieser Antwort kann ich sagen, dass es keine echte Konvention gibt? :/ –