2016-12-24 54 views
1

我需要使用基于对象类型/类的简单if语句。关于对象类型的条件

我有一个自定义数组类和一个矩阵类。 Array类的元素没有一个number_of_cols属性

def method(other) 
    if self.is_a?(Array) 
    c = self.class.zeros(shape[0], shape[1]) 
    elsif self.is_a?(Matrix) 
    c = self.class.zeros(number_of_rows, other.number_of_cols) 
    end 
end 

但是,运行这个时候,我得到一个错误:

undefined method 'number_of_cols' for Array 

这是exactyle为什么我有这样的if语句。 我也尝试self.responds_to?(:number_of_cols)elsif但同样的错误。

我总是可以制作两种方法,每种类型一种,但我还想了解为什么在专门的帮助工具(如is_a?responds_to?)中不起作用以避免这些问题。

+0

你试过'self.number_of_rows'吗? – asterite

+0

是的,我得到:'未定义的方法'number_of_rows'为Array'。 它不应该去那里,因为它不是一个矩阵,self.is_a?(矩阵)应该防止这个 –

回答

2

您在致电other.number_of_cols,但您尚未确定otherMatrix,只有self是一个。

+0

正确的感谢修复它,但因为我从来没有把自己称为矩阵我没有想到由于这个条件不被满足,它运行这个块。 –