我正在从基于ruby 1.9的书中学习ruby,但目前我正在使用2.2
我有两个班级(来自书中)
class Point
def initialize(x,y)
@x,@y = x,y
end
end
class Point3D < Point
def initialize(x,y,z)
super(x,y)
@z = z
end
end
然而,当我致电Point3D.new(0,1,2)
时,红宝石翻译会引发ArgumentError
wrong number of arguments (3 for 2)
。
为什么会这样?
修改
我省略了说Point类在另一个require
d文件中。
我试过打电话
require "./Point.rb"
point = Point.new(0,1)
puts point
按预期工作
然后按照描述添加了Point3D类并尝试调用
require "./Point.rb"
class Point3D < Point
...
end
point1 = Point3D.new(0,1,2)
puts point1
引发了ArgumentError。
如果我将这两个类放在同一个文件中(Point3D.rb)但是这个问题不会发生,但是如果我将Point3D类放在Point.rb中,则错误仍然存在。
答案 0 :(得分:0)
我明白了问题所在。
本书就如何创建initialize
重载
class Point
def initialize(x,y)
@x,@y = x,y
end
def self.new(x,y)
#other stuff
super
end
end
并且错过了来自super
Point3D
来电
我评论过self.new
和Point
正在按预期工作。
有趣的是,如果您在文件 Point.rb 中添加Point
方法,就像这样
class << Point
def to_s
"foo"
end
end
Point.rb正常工作。