【问题标题】:Ruby find method callers classRuby 查找方法调用者类
【发布时间】:2015-07-16 03:39:48
【问题描述】:

我有 A 和 B 类,每个类分别有 a 和 b 方法,如下所示。

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

如何返回调用a 的B,以便我可以在A 中使用B 的方法?

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

【问题讨论】:

  • 您似乎在“类”的意义上使用“对象”一词。我修复了明确的案例,但留下了不明确的案例。你能修好它们吗?

标签: ruby class methods


【解决方案1】:

除了使用源的位置 (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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多