說我有Player
類,我想一個布爾值的方法來檢查,如果玩家被攻擊:在Ruby方法使用一個問號
class Player
attr_accessor :name, :health, :attacked?
def initialize(name)
@name = name
@health = 100
@attacked? = false
end
end
我得到一個語法錯誤:
SyntaxError: (irb):14: syntax error, unexpected '='
@attacked? = false
^
from /usr/bin/irb:12:in `<main>'
刪除從attacked
問號解決了這個問題,但我認爲這將更好地遵循約定,在我的代碼attacked?
。這不是什麼大不了的事放棄了問號,但爲什麼zero?
和nil?
公約時@variables?
和def methods?=
是無效的?
'@ attacked'是一個實例變量,而不是一個方法。 '@attacked = false'; ......「def攻擊? @attacked;結束' –
我的猜測是你不能將問號作爲變量名的一部分。這隻適用於方法。另外,我不記得帶有setter的單個問號方法。他們都是獲得者。 –
這是一個很好的觀點。他們都是獲得者。用問號創建一個setter會創建「attacked?=」方法,這也是無效的語法。所以我的代碼也會有一個無效的變量名和一個無效的方法名。 – rubyuser1357796