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