您可以使用#send方法通过方法名称调用对象方法:
object.send(:foo) # same as object.foo
您可以将参数传递给调用的方法:
object.send(:foo, 1, "bar", 1.23) # same as object.foo(1, "bar", 1.23)
因此,如果变量“attribute”中有属性名称,您可以使用以下命令读取对象的属性
object.send(attribute.to_sym)
并写入属性的值
object.send("#{attribute}=".to_sym, value)
在 Ruby 1.8.6 中,#send 方法可以执行任何对象的方法,无论其可见性如何(例如,您可以调用私有方法)。这在 Ruby 的未来版本中可能会发生变化,您不应该依赖它。要执行私有方法,请使用#instance_eval:
object.instance_eval {
# code as block, can reference variables in current scope
}
# or
object.instance_eval <<-CODE
# code as string, can generate any code text
CODE
Update
您可以使用public_send
调用有关可见性规则的方法。
object.public_send :public_foo # ok
object.public_send :private_bar # exception