2015-06-03 59 views
1

我正在學習從一本書紅寶石基於Ruby 1.9,但目前我使用的是2.2紅寶石super關鍵字引發ArgumentError

我有兩個班(從書)

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)時,Ruby解釋器引發了一個ArgumentError,它表示wrong number of arguments (3 for 2)

這究竟是爲什麼?

編輯

我省略說Point類是在另一個require d文件。

我試着打電話給

require "./Point.rb" 

point = Point.new(0,1) 
puts point 

其按預期工作

然後加入三維點類如過描述,並試圖打電話

require "./Point.rb" 

class Point3D < Point 
... 
end 

point1 = Point3D.new(0,1,2) 
puts point1 

這提高了引發ArgumentError。

如果我把這兩個類放在同一個文件(Point3D.rb)中,但是這個問題不會發生,但是如果我把Point3D類放在Point.rb中,錯誤依然存在。

+0

2.1.2和2.2.0似乎都沒有問題。只能看到兩種情況,你會得到這個錯誤 - 超級被調用沒有參數和初始化3個參數點。我的代碼中的 – osman

+0

很明顯,我沒有這樣做。 – fra9001

+1

2.1,2.2 @linux:不可重現。 – mudasobwa

回答

0

我明白了問題所在。

這本書對如何創建initialize超載

class Point 
    def initialize(x,y) 
     @x,@y = x,y 
    end 

    def self.new(x,y) 
     #other stuff 
     super 
    end 
end 

一個例子,它是從Point3D

缺少super呼叫我的評論和self.newPoint工作正常。

有趣的是,要注意,如果你的文件的方法添加到Point Point.rb這樣

class << Point 
    def to_s 
     "foo" 
    end 
end 

Point.rb正常工作。

+3

一個好的做法是嘗試運行你在這裏發佈的確切代碼,看看它是否可以在沒有任何其他代碼的情況下工作。否則,我們對你的問題無能爲力。 – osman

相關問題