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