使用Ruby中的重载方括号[]访问变量

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)

Chu*_*uck 8

变量和消息存在于不同的命名空间中.为了将变量作为消息发送,您需要将其定义为:

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)