如何为名称以问号结尾的属性定义setter?

Sim*_*mon 6 ruby

我正在尝试添加一个名为"启用"的属性?到具有吸气剂和二传手的模型.但是,当我执行以下操作时:

def enabled?= value
  # .. logic goes here ..
end
Run Code Online (Sandbox Code Playgroud)

我明白了 syntax error, unexpected '?', expecting '\n' or ';'

我应该做什么呢?

sep*_*p2k 10

是的,ruby语法只允许?方法名称,如果它是最后一个字符,所以foo?=无效.有一两件事你可以做,那将是非常地道的,是定义enabled?,enabledisable(或enable!disable!,如果你想强调的是,他们变异的方法).

如果这不符合您的需求,您可以只为这些方法命名enabled?,enabled=并且只是注意名称之间的轻微不兼容性.


Ste*_*eet 7

ruby中的方法名称以小写字母或下划线开头,可选地后跟大写和小写字母下划线和digts.方法名称可以选择以问号,感叹号或等号结尾.

所以你不能!

你可以按照通常的ruby惯用法定义启用如下: -

def enabled?
  @enabled
end

def enabled=(value)
  @enabled = value
end
Run Code Online (Sandbox Code Playgroud)

总结一下.如果要向外界公开属性,请确保您的变量名称允许在方法名称规则的范围内.