我在 Ruby 中有以下代码:
class Base
def Function1
puts 'Base Function1'
end
def Function2
Function1
end
end
class Derived < Base
def Function1
puts 'Derived Function1'
end
end
obj = Derived.new
obj.Function2
当我运行上面的代码时,我收到以下错误:
/Users/vkuppuswamy/.rvm/rubies/ruby-2.0.0-p0/bin/ruby -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /Users/vkuppuswamy/RubymineProjects/TestRubyProj/TestRuby.rb
/Users/vkuppuswamy/RubymineProjects/TestRubyProj/TestRuby.rb:7:in `Function2': uninitialized constant Base::Function1 (NameError)
from /Users/vkuppuswamy/RubymineProjects/TestRubyProj/TestRuby.rb:18:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'
我可以看到Function2
在课堂Base
上,已经尝试调用一些常量Function1
。我不明白为什么会发生这种情况。我认为Function1
将调用派生类方法。当我Function2
将基类中的更改为:
def Function2
self.Function1
end
在我调用Function1
using的地方self
,它可以工作,并且我得到输出:
Derived Function1
你能帮我理解为什么会这样吗?我认为这self
在 Ruby 中是隐含的。