我正在学习Ruby的对象模型。我写过这个剧本:
#/usr/bin/ruby
module MyModule
class MyBase
def class_b_method
puts "class_b_method called"
end
end
class MyClass < MyBase
attr_accessor :name
class_b_method
def set_name(name)
@name = "My name is #{name}"
end
def display_name
return @name
end
end
end
obj = MyModule::MyClass.new
obj.set_name "Martin"
puts obj.display_name
运行上面的代码我收到此错误:
module.rb:13: undefined local variable or method `class_b_method' for MyModule::MyClass:Class (NameError)
我正在尝试在类MyClass
中调用父方法。我做错了什么?
答案 0 :(得分:2)
在课程MyClass
内,自我为MyClass
。但您将class_b_method
定义为类MyBase
内的实例方法,即。可以由类MyBase
的实例调用的方法,不能由类本身调用。所以self.class_b_method
会抛出一个合理的错误。为了使你的代码可行,请按如下方式编写方法:
class MyBase
def self.class_b_method
puts "class_b_method called"
end
end