Ruby查找方法调用者类

时间:2015-07-16 03:39:48

标签: ruby class methods

我有课程AB,每个课程分别有方法ab,如下所示。

class A
  def a
    #I want to get the object which calls this method
    #caller = B
  end
end

class B
  def initialize
    @to_call = A.new
  end
  def b
    @to_call.a
  end
end

B.new.b

如何返回调用B的{​​{1}},以便我可以在a内使用B的方法?

我有一个班级ABoard个班级可以使用。 Board类有一个方法Game,可以使用interactgets.chomp来输入用户输入来模拟使用箭头键的猜谜游戏或游戏。游戏类调用交互方法开始玩游戏,并向其发送一个块来处理游戏的播放方式。每个游戏都有自己的一套规则,因此每个游戏类都有一个向用户显示其规则手册的方法。在STDIN.getc内,当用户输入interact时,我希望board类返回调用其"-rules"方法的类,并将其存储在变量interact中。定义了caller变量后,我想使用caller来显示称为主板caller.rule_book方法的游戏类规则。

1 个答案:

答案 0 :(得分:0)

除了使用源的位置(caller_locations)之外,我不知道你能做到的方式,但我建议不要遵循这条道路。间接太多通常会导致代码极难调试。简单地将上下文(在本例中为self或计算所需的属性)作为参数传递更简单易读:

class A
  def initialize(context)
    @context = context
  end

  def a
    # Do something with @context
  end
end

class B
  def initialize
    @to_call = A.new(self)
  end

  def b
    @to_call.a
  end
end

B.new.b