Modifica: tre anni dopo; i tempi, che sono a-changin' ...
Julik's answer è il modo più semplice e migliore per affrontare il problema in questi giorni:
class Foo
attr_accessor :dead
alias_method :dead?, :dead # will pick up the reader method
end
La mia risposta alla domanda iniziale segue, per i posteri ...
la versione corta:
non è possibile utilizzare un punto di domanda in nome di una variabile di istanza.
La versione più lunga:
Prendiamo, per esempio, attr_accessor :foo
- è semplicemente concettualmente un po 'di zucchero sintattico per i seguenti:
def foo
@foo
end
def foo=(newfoo)
@foo = newfoo
end
Inoltre, il suffisso punto interrogativo è per lo più solo una convenzione per indicare che il valore di ritorno di un metodo è un valore booleano.
la migliore approssimazione che posso fare di ciò che si sta andando per qui ...
class MyClass
def initialize
@awesome = true
end
def awesome?
@awesome
end
end
In questo caso, ci può essere un caso da effettuare per l'utilizzo di attr_accessor
- dopo tutto, può essere esplicita che stai lavorando direttamente con un attributo booleano. Generalmente, salvi il suffisso del punto interrogativo per quando sto implementando un metodo il cui valore di ritorno booleano è basato su condizioni leggermente più complesse del solo valore di un attributo.
Cheers!
Modifica, due anni più tardi, dopo un recente commento:
- Rubino fa rispettare certe convenzioni di denominazione.
I simboli in Ruby non possono avere punti interrogativi. Così invocazioni di :my_boolean_attribute?
falliranno con uno NameError
. Edit: non è corretto, basta usare la sintassi citato per un simbolo, per esempio, :"my_attribute?"
- simboli sono immutabili, il tentativo di assegnare ad uno lancerà un
SyntaxError
.
fonte
2009-08-11 22:09:53
Rubyist di solito non usa il prefisso is_ né nei nomi delle variabili né nei nomi dei metodi. Semplicemente fantastico? invece di is_awesome? –
Buon punto, weppos. Modificato il 'is_' per evitare di confondere i posteri ;-) –
Da questa risposta deduco che non c'è una vera convenzione? :/ –