我正在尝试添加名为“已启用?”的属性到具有吸气剂和二传手的模型。但是,当我执行以下操作时:
def enabled?= value
# .. logic goes here ..
end
我得到syntax error, unexpected '?', expecting '\n' or ';'
我应该做什么呢?
答案 0 :(得分:10)
是的,ruby语法只允许方法名称中的?
,如果它是最后一个字符,那么foo?=
无效。如果你想强调的话,你可以做的一件事就是定义enabled?
,enable
和disable
(或enable!
和disable!
。他们正在改变方法。)
如果这不符合您的需求,您只需将方法命名为enabled?
和enabled=
,然后让这些名称之间存在轻微的不相关性。
答案 1 :(得分:7)
ruby中的方法名称以小写字母或下划线开头,可选地后跟大写和小写字母下划线和digts。方法名称可以选择以问号,感叹号或等号结尾。
所以你不能!
你可以按照通常的ruby惯用法来定义启用如下: -
def enabled?
@enabled
end
def enabled=(value)
@enabled = value
end
总结一下。如果要向外界公开属性,请确保您的变量名称允许在方法名称规则的范围内。
答案 2 :(得分:1)
一个小变化是将getter方法设为别名,同时允许enabled
和enabled?
:
def enabled
@enabled
end
def enabled=(value)
@enabled = value
end
alias_method :enabled?, :enabled
答案 3 :(得分:0)
仅为enabled
查询方法只是语法糖,它们并不意味着用作属性或实例变量。如果您愿意,也可以为语法糖添加方法enabled?
。
答案 4 :(得分:0)
我总是将我的布尔变量命名为'is',如'isEnabled'。然后它具有与没有复杂性需求的问号相同的含义。