获取块的调用对象

时间:2017-04-07 13:43:06

标签: ruby block

如果我的课程Object1包含方法method1和"全球" method2模块中的Kernel

method1通过将其转换为proc来运行块,然后调用它。

如果我有类似的东西:

obj1 = new Object1
obj1.method1(arg1,arg2){ method2() }

method2是否可以知道obj1称为阻止?

1 个答案:

答案 0 :(得分:1)

假设您希望method2成为全局方法。通过传递绑定,您可以获得对调用对象的访问权限。但更简单的方法就是将调用者对象传递给它:

示例:

def method2(o)
  #puts this.object_id
  puts "Inside method2()"
  puts "#{o.object_id}"
end


class Object1
  def method1
    method2(self)
  end
end

obj1 = Object1.new

puts obj1.object_id

obj1.method1()

<强>输出:

23644040
Inside method2()
23644040