fly*_*r88 1 ruby overriding overloading operator-overloading
嗨,我想做以下事情.我只是想重载[]方法以访问实例变量...我知道,它根本没有意义,但我想这样做是因为一些奇怪的原因:P
会是这样的......
class Wata
attr_accessor :nombre, :edad
def initialize(n,e)
@nombre = n
@edad = e
end
def [](iv)
self.iv
end
end
juan = Wata.new('juan',123)
puts juan['nombre']
Run Code Online (Sandbox Code Playgroud)
但这会引发以下错误:
overload.rb:11:在`[]'中:未定义的方法'iv'表示#(NoMethodError)
我怎样才能做到这一点?
编辑
我也找到了这个解决方案:
def [](iv)
eval("self."+iv)
end
Run Code Online (Sandbox Code Playgroud)
变量和消息存在于不同的命名空间中.为了将变量作为消息发送,您需要将其定义为:
def [](iv)
send iv
end
Run Code Online (Sandbox Code Playgroud)
(如果你想通过访问者获取它)
要么
def [](iv)
instance_variable_get "@#{iv}"
end
Run Code Online (Sandbox Code Playgroud)
(如果你想直接访问ivar)