我希望Ruby的消息传递基础结构意味着可能会有一些巧妙的窍门。
如何确定调用对象-哪个对象调用了我当前所在的方法?
最佳答案
作为一个选项,有一个 binding_of_caller
gem,它允许您在调用堆栈上的任何调用者(调用者,调用者的调用者等)的上下文中执行代码。对于 better_errors
中使用的开发中的检查堆栈(检查在堆栈上的任何位置执行任何操作)很有用。
我应该提到,该技术只能用于调试,娱乐或教育目的,因为它确实严重违反了OOP原则。
主要是因为eval
。
让我们准备一些东西:
require 'binding_of_caller' # I assume, you installed this gem already?
获取立即(堆栈上最近的,因此是0
)调用者实例:binding.of_caller(0).eval('self')
...甚至是直接调用方法:binding.of_caller(0).eval('__method__')
如果需要使调用堆栈更高级,请使用0
以外的数字来获取 call 者的绑定(bind)。糟糕透顶。但是,如果您真的需要这个,那就去吧。
关于ruby - 有什么方法可以确定哪个对象称为方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2703136/