В Ruby нет многомерных массивов.У вас есть массив, содержащий массивы в качестве элементов.Поэтому, если вы получите первое «измерение», вы получите другой массив обратно (или ноль, если вы превысили границы внешнего массива).
nil
- это объект NilClass
, имеющий конечное значение (и маленький) набор определенных методов.И метод []
, который вызывается при использовании синтаксиса whatever[:foo]
, просто не определен в NilClass
.Таким образом, он ничего не может вернуть.
Как правило, не имеет смысла определять все возможные методы для nil, так как это еще больше запутает людей и приведет к появлению множества трудно обнаруживаемых ошибок.
Однако, если вы знаете, что делаете, и готовы разобраться с последствиями, вы можете использовать метод try
, который определяется некоторыми средами (например, ActiveSupport для Rails), ноне является частью самого Ruby.Он ловит NoMethodError
и возвращает nil
.В вашем случае вы могли бы использовать
> ar[2].try(:[], 2)
=> nil
Однако это обычно не рекомендуется, так как затрудняет отладку.Вместо этого вы должны проверить границы, прежде чем пытаться получить доступ к массиву (например, с помощью array.length
) или с помощью включающих циклических конструкций, таких как ar.each {|e| puts e}
.