嗨,我是Ruby新手,我不明白为什么对超类的静态方法的调用不能使用super关键字,我得到了这种错误
super: no superclass method `creer_adherent' for Adherent:Class
这就是超类:
class Personne
...
def self.create(type)
print "Nom:"
nom = gets.chomp
print "Prénom:"
prenom = gets.chomp
if type == "adhérent"
personne = Adherent.new(nom,prenom)
else
personne = Auteur.new(nom,prenom)
end
@@liste.push(personne)
puts "#{type.capitalize} créé(e) : #{personne.nom} #{personne.prenom}"
end
end
然后是子类:
class Adherent < Personne
...
def self.creer_adherent
super.create("adhérent")
end
end
main.rb
loop do
case menu
when "0"
break
when "1"
Adherent.creer_adherent
end
end
2条答案
按热度按时间vcudknz31#
当我把调用改为这个时,它起作用了:
现在的问题是我有完全相同的类(Livre)和它的超类(Document),但是当我使用与上面问题中完全相同的代码(super.create)时,它没有给予我一个错误,并且工作得很好!
pengsaosao2#
你误解了Ruby中
super
关键字的作用和它的实际用途。super
用于调用超类中同名的方法:它不是对超类的引用。因此,当你调用
super
时,你是在超类上调用creer_adherent
-然后你试图在它的返回值上调用.create
。如果你只想调用一个继承的方法,你只需调用它:
如果你真的想显式地调用超类上的方法,你可以:
但这不是你通常会做的事情。