我知道这是一个不好的做法,但我发现了一些东西,并且我想了解更多 ruby 中的方法调用机制。
最近我正在创建一个类,并将一个方法命名为 print。在那个打印中,我调用了标准打印,显然,我遇到了问题。当我发现我有名字冲突时,我立即知道正确的解决方案是将我的打印更改为另一个名字,但我的灵魂中产生了一个疑问:如果出于任何原因我真的需要维护名称 print,我如何在我的方法 print 中调用标准 ruby print ?
最佳答案
当您调用print
时,这通常是Kernel.print
。您不需要显式添加接收者 Kernel
的原因是因为 Kernel
模块包含在 Object
中(ruby 中大多数对象的基类) )。
在您的情况下,您已经在自己的类中定义了 print
方法,因此如果您想使用 Kernel#print
您有 2 个选项,您可以:
- 显式调用
Kernel.print
(可能是此实现的首选);或 - 调用
super
将其传递到层次结构链(直到它遇到另一个print
方法,通常是Kernel#print
)<
示例:
class MyObject
def print(val)
Kernel.print "#{val} called with Kernel.print"
puts
super "#{val} print passed up the hierarchy chain"
end
end
o = MyObject.new
o.print('engineersmnky')
# engineersmnky called with Kernel.print
# engineersmnky print passed up the hierarchy chain
#=> nil
关于ruby - 从同名方法调用 ruby 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76740197/