ruby - 尝试使用 Ruby super 直接调用方法

标签 ruby

考虑这段代码:

class Hello
  def hi
    puts "Hello"
  end
end

class HelloWorld < Hello
  def hi
    super.hi
    puts "World"
  end
end

HelloWorld.new.hi

给出输出:

$ ruby super.rb
Hello
super.rb:9:in `hi': undefined method `hi' for nil:NilClass (NoMethodError)
    from super.rb:14:in `<main>'

为什么要打印 Hello?我希望只是得到错误。我也知道我真正应该做的只是调用 super 而不是 super.hi 但我想了解“幕后”发生了什么。

最佳答案

super 已经自动调用了被覆盖的方法。发生的事情是 Hello 中的 hi 返回 nil,因为它只是简单地执行 puts 并返回 nil(这是最后一个表达式)。所以 Ruby 评估调用方法的 super,然后它尝试从生成的 nil 对象访问 hi 方法,但没有.

关于ruby - 尝试使用 Ruby super 直接调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17902929/

相关文章:

ruby-on-rails - 继承资源和CanCan 3层嵌套

ruby-on-rails - 列出子类在 Ruby 脚本/控制台中不起作用?

ruby-on-rails - 查找所有具有重复名称的用户

ruby - 如何在 Ruby 中执行复杂的自定义排序?

ruby-on-rails - Ruby yaml 无法读取 unicode

ruby-on-rails - ruby rails 3 : sort array based on data from ActiveRecord

sql - 来自 ActiveRecord::Base.connection.execute(sql) - PostgreSQL 的结果

ruby-on-rails - 无法获取 CSV 文件中每一行的正确值

ruby - 赛璐珞监督组不起作用

ruby-on-rails - 组合多维数组的第一个元素