2013-03-04 54 views
1

我的工作,从Matrix继承网格类:自定义类的实例化对象的超

​​

我不能似乎能够覆盖::initialize因为它是私有的。上述工作,但产生Matrix类而不是我的自定义类的实例,所以我卡住了。当调用to_s和接收"Matrix[[X,O],[O,O]]"的东西时,我的课没有实例化。我错过了什么?

+0

你的意思是'#initialize'? – Tal 2013-03-04 20:27:16

回答

0

有红宝石没有::new方法,您通过#initialize

定义它,当你调用super它调用Matrix::[]与提供的参数。

看那source code

def Matrix.[](*rows) 
    Matrix.rows(rows, false) 
end 

你可以尝试用你的逻辑定义Grid::rows代替。或者只是覆盖#initialize


顺便说一句,这是写得不好,他们应该做rows(rows,false)(无矩阵),以防止就此问题。

+0

犯了一个错误,出于某种原因,'initialize'方法不能被'Matrix'类覆盖。当像'Array'这样的子类继承时,我可以重新定义'initialize'并且用任何一个参数都可以调用'super'。 – nicooga 2013-03-04 20:23:35

+0

遍地都有'新'法。 – 2013-03-04 20:24:01

+0

@nicooga不管无法重写'#initialize'答案的其余部分有帮助吗? – Tal 2013-03-04 20:26:16