我无法理解Ruby Matrix类的这种行为,它只是一个(丑陋)实现细节还是我遗漏了什么?
>irb
irb(main):001:0> require 'matrix'
=> true
irb(main):003:0> m = Matrix[[1,2,3], [4,5,6], [7,8,9]]
=> Matrix[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
irb(main):004:0> m[1,1]
=> 5
irb(main):005:0> m[1,10]
=> nil
irb(main):006:0> m[10,1]
NoMethodError: undefined method `[]' for nil:NilClass
from c:/ruby/lib/ruby/1.9.1/matrix.rb:261:in `[]'
from (irb):6
from c:/ruby/bin/irb:12:in `<main>'
答案 0 :(得分:1)
因为在第一种情况(1,10)中,第一个索引应用于矩阵(与数组相同),第二个索引应用于行(再次与数组相同)。但在第二种情况(10,1)中,第一个索引应用于数组,但第二个索引应用于nil
(因为没有第10行) - 这会引发异常。