Ruby super 报错,麻烦各位帮我看看!

codecook · 2013年01月30日 · 最后由 codecook 回复于 2013年01月30日 · 2592 次阅读

在做 super 测试时,按照实例修改了一下,结果报错,代码如下:

class Person
  attr_accessor :name  ,:age ,:sex1
    def say_hello
     puts "#{self.name}"
    end
end
class Man < Person
def say_sex1
    puts "i sex is #{self.sex1}"
    super
    say_hello
   end
end
man = Man.new
man.name="zhangsan"
#man.age= 20
man.sex1 = "Nan"
man.say_sex1

错误:

D:/rubytest/3.14:18:in `say_sex1': super: no superclass method `say_sex1' for #<Man:0x290a420 @name="zhangsan", @age=20, @sex1="Nan"> (NoMethodError)
    from D:/rubytest/3.14:31:in `<main>'
i sex is Nan
[Finished in 0.1s with exit code 1]

为什么名字输出不了?

在 Man#say_sex1 里面调用 super,既是调用 Person#say_sex1,但是 Person 没有 say_sex1 这个实例方法。

貌似楼主没有搞懂 super 的意思哦

我是参考这个成功的例子的理解改的,但怎么这个例子就 OK 呢?那我必须怎么修改? class Person attr_accessor :name ,:age,:sex1 def say_hello puts "#{self.name}" end

def say_abge puts "#{self.age}" end end class Man < Person # def sex # return "Nan" # end

def say_sex1 puts "i sex is #{self.sex1}" end def say_hello super say_abge say_sex1 end end man = Man.new man.name="zhangsan" man.age= 30 man.sex1 = "nv" man.say_hello

#1 楼 @Rei 看看上面这个例子。

我改成这样也还是不行。 class Person attr_accessor :name ,:sex1 def say_hello puts "#{self.name}" end end class Man < Person def say_sex1 puts "i sex is #{self.sex1}" def say_hello super say_sex1 end end end man = Man.new man.name="zhangsan" #man.age= 20 man.sex1 = "Nan" man.say_hello

代码排一下版吧,看顶楼帮你编辑的格式。

我明白了!最后这个例子改对了!错误原因是中间少了 END。super 的方法我也终于搞清楚了!

#6 楼 @Rei 请教如何排版?

#6 楼 @Rei 明白了,以后会弄了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号