ruby - 从同名方法调用 ruby​​ 中的方法

标签 ruby

我知道这是一个不好的做法,但我发现了一些东西,并且我想了解更多 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/

相关文章:

ruby-on-rails - 通过发送更新 ActiveRecord

ruby-on-rails - 套接字错误 : HiPay Integration in Rails app (Payment API)

Ruby 遍历所有模型对象,操作每个对象并添加到 CSV

ruby-on-rails - Ruby on Rails 路线说明

ruby - 在 Vagrant 配置 Bash 脚本中运行 Ruby 文件

ruby-on-rails - Heroku rake 数据库 :migrate

ruby - 在 END {} 中访问 Ruby 退出代码

ruby - NMatrix 不同形状数组的划分

ruby-on-rails - Ruby on Rails - 我可以在保存数据之前修改数据吗?

mysql - 如何在 ruby​​ on rails 中获取 Object 的值