我有一个继承自另一个的类.当调用子进程中的构造函数时,它正在调用父进程,该进程调用方法.对我来说应该工作得很好,但我得到一个例外.ruby代码如下:
class MyTestClass
def initialize
@foo = "hello world"
puts "init parent"
writeFoo
end
def writeFoo
puts @foo + " from base"
end
end
class MySubClass < MyTestClass
def initialize
puts "init sub"
super
end
def writeFoo
puts @foo + " from sub"
super.writeFoo
end
end
@foo = MySubClass.new
Run Code Online (Sandbox Code Playgroud)
运行该代码时,我得到一个未定义的方法异常,如下所示,但打印正确的输出.有人可以解释一下原因吗?
/Users/tj/dev/coursera/sml/hw6/test.rb:21:in `writeFoo': undefined method `writeFoo' for nil:NilClass (NoMethodError)
from /Users/tj/dev/coursera/sml/hw6/test.rb:5:in `initialize'
from /Users/tj/dev/coursera/sml/hw6/test.rb:16:in `initialize'
from /Users/tj/dev/coursera/sml/hw6/test.rb:25:in `new'
from /Users/tj/dev/coursera/sml/hw6/test.rb:25:in `<main>'
init sub
init parent
hello world from sub
hello world from base
[Finished in 0.1s with exit code 1]
Run Code Online (Sandbox Code Playgroud)
在ruby中super意味着调用当前方法的超类实现 - 与某些语言不同,它不是从基类调用任意方法的机制.
super.writeFoo
Run Code Online (Sandbox Code Playgroud)
调用当前方法的超类注入(即writeFoo),然后调用writeFoo的结果(因此错误).
| 归档时间: |
|
| 查看次数: |
2660 次 |
| 最近记录: |