Edytuj: trzy lata później; czasy, są one-changin' ...
Julik's answer jest najprostszym i najlepszym sposobem na rozwiązanie problemu tych dniach:
class Foo
attr_accessor :dead
alias_method :dead?, :dead # will pick up the reader method
end
Moja odpowiedź do oryginalnego pytanie wynika, dla potomnych ...
wersja krótka:
nie można użyć znaku zapytania w nazwie zmiennej instancji.
Dłuższa wersja:
Weźmy, na przykład, attr_accessor :foo
- to prostu koncepcyjnie nieco cukru składniowej za:
def foo
@foo
end
def foo=(newfoo)
@foo = newfoo
end
Ponadto znak zapytania przyrostek jest przeważnie tylko konwencja wskazująca, że wartość zwracana metody jest wartością logiczną.
Najlepszym przybliżeniem mogę zrobić tego, co masz zamiar tutaj ...
class MyClass
def initialize
@awesome = true
end
def awesome?
@awesome
end
end
W tym przypadku nie może być przypadek należy dokonać za korzystanie attr_accessor
- Po tym wszystkim, może to być wyraźny, że pracujesz bezpośrednio z atrybutem boolean. Zazwyczaj zapisuję sufiks znaku zapytania, gdy wdrażam metodę, której boolowska wartość zwracana jest oparta na nieco bardziej złożonych warunkach niż wartość atrybutu.
Pozdrawiam!
Edit, dwa lata później, po niedawnym komentarzu:
- Ruby wymusza pewne konwencje nazewnictwa.
Symbole w Ruby nie mogą mieć znaków zapytania. W związku z tym wywołania z obu komputerów będą kończyły się niepowodzeniem z NameError
. Edycja: nieprawidłowa, po prostu użyj cytowanej składni dla symbolu, np. :"my_attribute?"
- Symbole są niezmienne, próba przypisania do jednego spowoduje wyświetlenie
SyntaxError
.
Rubyist zwykle nie używa przedrostka is_ ani w nazwach zmiennych, ani w nazwach metod. Po prostu niesamowite? zamiast is_awesome? –
Dobra uwaga, weppos. Zmieniono "is_", aby uniknąć mylnego potomka ;-) –
Z tej odpowiedzi wynika, że nie ma prawdziwej konwencji? :/ –