不要这样做!
尝试创建在您的语言中无效的标识符不是一个好主意.如果你真的想设置这样的变量,请使用属性宏:
attr_writer :bar
attr_reader :baz
attr_accessor :foo
Run Code Online (Sandbox Code Playgroud)
好的,既然你已经被警告了,这里是怎么做的.每次获得常规访问器时,只需返回同一个类的另一个实例,并随时收集所需的信息.
class SillySetter
def initialize path=nil
@path = path
end
def method_missing name,value=nil
new_path = @path ? "#{@path}.#{name}" : name
if name.to_s[-1] == ?=
puts "setting #{new_path} #{value}"
else
return self.class.new(path=new_path)
end
end
end
s = SillySetter.new
s.foo = 5 # -> setting foo= 5
s.foo.bar.baz = 4 # -> setting foo.bar.baz= 4
Run Code Online (Sandbox Code Playgroud)
我不想鼓励红宝石愚蠢,但我无法自拔!
| 归档时间: |
|
| 查看次数: |
2844 次 |
| 最近记录: |