Say mam klasę Player
i chcę metoda logiczna, aby sprawdzić, czy gracz jest atakowany:Używanie znaku zapytania w metodach rubinowe
class Player
attr_accessor :name, :health, :attacked?
def initialize(name)
@name = name
@health = 100
@attacked? = false
end
end
pojawia się błąd składni:
SyntaxError: (irb):14: syntax error, unexpected '='
@attacked? = false
^
from /usr/bin/irb:12:in `<main>'
Usuwanie znak zapytania z attacked
rozwiązuje problem, ale pomyślałem, że lepiej będzie przestrzegać konwencji, aby w moim kodzie był attacked?
. To nie jest wielka sprawa, aby zrezygnować ze znaku zapytania, ale dlaczego konwencje zero?
ii są nieprawidłowe?
'@ attacked' jest zmienną instancji, a nie metodą. '@attacked = false'; ... "zaatakowano def?"; @zaatakowany; end' –
Domyślam się, że nie możesz mieć znaku zapytania jako części nazwy zmiennej. To tylko dla metod. Ponadto nie pamiętam metody pojedynczego znaku zapytania z ustawiaczem. Wszystkie są gettery. –
To dobra uwaga. Wszystkie są gettery. Stworzenie setera ze znakiem zapytania tworzy metodę "attacked? =", Która jest również nieprawidłową składnią. Tak więc mój kod miałby niepoprawną nazwę zmiennej i niepoprawną nazwę metody. – rubyuser1357796