当前位置: 代码迷 >> Ruby/Rails >> ruby深入研究五
  详细解决方案

ruby深入研究五

热度:154   发布时间:2016-04-29 02:19:42.0
ruby深入研究5

instance_eval()方法的实际其实就一句话:不改变当前上下文的前提下,改变当前self。

class AAA  def initialize    @v = 1  endenda = AAA.newx = 3puts selfa.instance_eval do  puts self  @v += x  puts @vend

?如上述代码所示,x的作用域应该是main内,结果在a内也能访问。这应该算是扁平作用域的一种高级用法。。

?

class AAA  @v = 2  def initialize    @v = 1  endenda = AAA.newa.instance_variable_get "@v"AAA.instance_variable_get "@v"

?第一个输出1,第二个输出2. 因为第一个是定义在AAA这个类的作用域中的,第二个是在AAA类的实例方法的作用域中的也就是在实例对象的作用域中的。

?

有了instance_eval我们就随时可以对一个对象进行内部探测,包括随时增加、修改一个对象的实例变量,牛逼吧?