为什么Matrix#[]对于不存在的列返回nil而对不存在的行有豁免?

时间:2010-12-14 13:01:58

标签: ruby matrix

我无法理解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>'

1 个答案:

答案 0 :(得分:1)

因为在第一种情况(1,10)中,第一个索引应用于矩阵(与数组相同),第二个索引应用于行(再次与数组相同)。但在第二种情况(10,1)中,第一个索引应用于数组,但第二个索引应用于nil(因为没有第10行) - 这会引发异常。