about 10 years ago
Super主要是呼叫parent method的內容
- 不帶括號的 super 會呼叫parent method 的內容
- 帶括號的 super() 則是呼叫parent method 的內容,並且帶入括號內的參數
接下來看幾個例子
不帶括號的super
class Parent
def my_method
puts "Parent is awesome"
end
end
class Kid < Parent
def my_method
puts "Kid is awesome"
super
end
end
當呼叫 b 的method時,super會再次呼叫 a method的內容
kid = Kid.new
kid.my_method
#Output
"Kid is awesome"
"Parent is awesome"
帶括號的super()
class Parent
def my_method(family = "Father")
puts "#{family} is awesome"
end
end
class Kid < Parent
def my_method(string = "Mother")
puts "Kid is awesome"
super(string)
end
end
當呼叫 b 的method時,super會再次呼叫 a method的內容,並且帶入 b 的參數
kid = Kid.new
kid.my_method
#Output
"Kid is awesome"
"Mother is awesome"