我被指派创建一个新的矩阵类。我不能使用require'Matrix'。
我有这个来访问矩阵的元素,其中@matrix是一个数组数组。
def [] (i, j)
@matrix[i][j]
end
如果我试图像这样访问它:
@a[0][0]
它不会工作。 (参数数量错误)
但如果我这样做:
@a.[](0,0)
或
@a[0,0]
它运作得很好。 关于如何使其发挥作用的任何想法?
答案 0 :(得分:1)
def [] (i, j)
@matrix[i][j]
end
根据方法[]
,它需要2个参数。但是@a[0][0]
并没有这样做,因为在这里你只传递方法[]
一个参数,即e 0
。只要。所以你得到了错误。但@a.[](0,0)
或@a[0,0]
是完美的,因为您向方法[]
发送了2个参数。当您编写@a[0,0]
时,Ruby会在内部将方法调用为@a.[](0,0)
。
如何修改代码,以便@a [0] [0]有效?
这是一个代码示例:
class Matrix
def initialize(a)
@matrix=a
end
def [](*a)
a.size == 1 ? @matrix[*a] : @matrix[a.first][a.last]
end
end
a = [[1,2,3],[4,7,5],[11,21,33]]
m = Matrix.new(a)
p m[2,2] # => 33
答案 1 :(得分:0)
您需要编写一个方法,可以递归地调用它,也可以检查传递给函数的参数数量。很难说这是否有效,因为我没有全班,但这样的事情可能有用:
def [] (*cords)
return @matrix[*cords] if cords.size == 1
@matrix[cords.first][cords.last]
end
或适用于任何数字维度的递归版本:
def [] (*cords)
cords.inject(@matrix){|m, c| m[c]}
end
答案 2 :(得分:0)
def [](i)
@matrix[i]
end
我猜,会这样做的。 FWIW,Ruby的Matrix []实现与您相同:[](i,j)