我有一个方法和一个名为x
的本地变量:
class A
def x; 5 end
end
x = 10
我想在不使用x
的情况下引用方法self.x
。例如,我想:
A.new.instance_eval{x} # => 10
返回5
。这可能吗?
答案 0 :(得分:3)
是的,有几种方式:
struct const_version {
const int a;
const char *b;
};
struct const_version *c = (struct const_version *)&nc;
如果您只允许A.new.instance_eval{x()} # => 5
A.new.instance_eval{send(:x)} # => 5
,那就不可能了。局部变量具有词法范围,并且在模糊的情况下优先于方法。
答案 1 :(得分:0)
有两种方法可以告诉Ruby您希望发送消息而不是本地变量:
A.new.instance_eval{ x() }
A.new.instance_eval{ self.x }
你也可以使用反射:
A.new.instance_eval{ public_send(:x) }
A.new.instance_eval{ method(:x).() }
Method
实施to_proc
,#2也可以写为A.new.instance_eval(&method(:x))
最干净的解决方案是重命名局部变量。