class MyParent
def self.foo
if this_method_was_called_internally?
puts "yay"
else
puts "boo"
end
end
end
class MyLibrary < MyParent
foo # yay
end
MyLibrary.foo # boo
这可能吗?
答案 0 :(得分:2)
简单的答案是否定的。但是你可以使用caller
,它可以让你访问调用堆栈,就像异常回溯一样:
def this_method_was_called_internally?
caller[1].include?(...)
end
(caller[1]
将是之前的调用,即调用this_method...
)
这是非常hackish,你从caller
获得的信息可能还不够。
除了试验外,请不要使用它。
答案 1 :(得分:2)
如果您可以对代码进行一些修改:
class MyParent
def self.foo(scope)
if scope == self
puts "yay"
else
puts "boo"
end
end
end
class MyLibrary < MyParent
foo(self) # yay
end
MyLibrary.foo(self) # boo