編輯:三年後;時代,他們是 - 起了變化...
Julik's answer爲解決這個問題,這些天最簡單,最好的方法:
class Foo
attr_accessor :dead
alias_method :dead?, :dead # will pick up the reader method
end
我的回答原來的問題如下,供後人......
簡短版本:
您不能在實例變量的名稱中使用問號。
較長的版本:
舉個例子來說,attr_accessor :foo
- 這是只是概念以下一點語法糖:
def foo
@foo
end
def foo=(newfoo)
@foo = newfoo
end
此外,問號後綴大多是剛一個表示方法的返回值是布爾值的約定。
最佳逼近我可以讓你要什麼,這裏的......
class MyClass
def initialize
@awesome = true
end
def awesome?
@awesome
end
end
在這種情況下,有可能的情況下爲使用attr_accessor
進行 - 畢竟,這可能是明文規定你直接使用布爾屬性。通常,當我實現一個方法,其布爾型返回值基於稍微複雜的條件而不僅僅是屬性的值時,我保存問號後綴。
乾杯!
編輯,兩年後,最近的評論後:
- 紅寶石強制執行特定的命名約定。
Ruby中的符號不能有問號。因此,:my_boolean_attribute?
的調用都將失敗,並顯示NameError
。編輯:不正確,只需使用引號語法表示符號,例如:"my_attribute?"
- 符號是不可變的,試圖分配給一個將會拋出一個
SyntaxError
。
Rubyist通常不會在變量名稱或方法名稱中使用is_前綴。真棒嗎?而不是is_awesome? – 2009-08-11 22:23:48
好點,weppos。編輯'is_'以避免混淆後人;-) – 2009-08-11 22:25:41
從這個答案我收集有沒有一個真正的約定? :/ – 2011-04-27 22:17:29