У меня возникли проблемы с пониманием этого поведения класса 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,10) первый индекс применяется к матрице (так же, как к массиву), а второй применяется к строке (опять же, как к массиву). Но во втором случае (10,1) первый индекс применяется к массиву, а второй здесь применяется к nil
(потому что нет 10-й строки) - это вызывает исключение.
Комментариев нет:
Отправить комментарий