例如:
class Testing
def return_caller_class
return caller_class
end
end
class Parent
attr_accessor :test_me
def initialize
self.test_me = Testing.new
end
end
class Child < Parent
end
class GrandChild < Child
end
test_Parent = Parent.new
test_Child = Child.new
test_GrandChild = GrandChild.new
puts test_Parent.test_me.return_caller_class => Parent
puts test_Child.test_me.return_caller_class => Child
puts test_GrandChild.test_me.return_caller_class => GrandChild
谢谢!!!
编辑:
我试过以下
class Testing
def return_caller_class
return caller[0][/`.*'/][1..-2]
end
end
输出是:
{"
"=>Parent}
{"
"=>Child}
{"
"=>GrandChild}
更好地解释我的问题。
我会将输出显示为
Parent
Child
GrandChild
答案 0 :(得分:2)
我对这个问题有点不了解,但我认为你犯了一些与获得来电者的班级名称无关的错误。如果我可以帮助你做这些事情,至少你可能会更近一步(如果解决方案甚至可能)!
首先,在我看来,你是从主程序对象调用return_caller_class
,而不是从你创建的这三个对象中的一个调用。在类Testing
的对象中有一个类Parent
的对象,但方法调用在两者之外。
其次,你似乎得到任何接近你想要的东西的唯一原因(当你获得像"=>Parent}
这样的输出时,与return_caller_class
方法无关。好像你无意中创造了你的程序的最后三行(当你添加了=> Parent
等)时出现了一些小的哈希值,这些哈希值是用puts
输出的。(在此确认:Has #puts created a new hash?)如果这些是评论,他们需要#
。
PS。我在另一个帖子上找到了这个gem的链接:https://github.com/asher-/sender。可能值得一试。
答案 1 :(得分:0)
class Testing
def return_caller_class
self.class.name
end
end
class ChildOne < Testing
end
class ChildTwo < Testing
end
result:
------------------------------------------------
>ChildOne.new.return_caller_class
=> "ChildOne"
>ChildTwo.new.return_caller_class
=> "ChildTwo"
>Testing.new.return_caller_class
=> "Testing"