编辑:三年后;时代,他们是 - 起了变化...
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