ruby 中super和super()的区别

  • 不同:super 会自动将子方法的参数传递给父方法,super() 不会
  • 相同:调用父类的同名函数
# 我们用一个示例来演示下这个机制
class Parent
  def say(message)
    puts message
  end
end

class Child < Parent
  def say(message)
    super
  end
 end
Child.new.say('Hi!')
# 输出Hi
如果Parent中的say是一个不带参数的方法,那结果会怎么样 ?
class Parent
  def say
    puts message
  end
end

class Child < Parent
  def say(message)
    super
  end
 end
Child.new.say('Hi!')
# 运行上面的代码会发现抛出了 ArgumentError (wrong number of arguments (given 1, expected 0)) 异常。
为了避免这个问题,也为了解决这个问题,我们可以明确的指出 super 不需要把子类中相关的参数传递给父类
为此,我们需要在 super 后添加一对小括号 () ,即 super() 明确的调用父类而不传递任何参数
 1 class Parent
 2   def say
 3     puts "I'm the parent"
 4   end
 5 end
 6 
 7 class Child < Parent
 8   def say(message)
 9     super()
10   end
11  end
12 Child.new.say('Hi!')
13 # 输出I'm the parent

 

 
posted @ 2020-11-27 17:11  瞎几把乱记  阅读(300)  评论(0编辑  收藏  举报