Я пытаюсь создать метод, чтобы определить, существует ли объект (в массиве), и если он является числовым.Тестирование объекта с помощью «если определено?»
Мой текущий код:
foo = [123, 456, 789, 012]
if defined?(foo[0]) and foo[0].is_a? Numeric
foo_at_zero = foo[0]
else
foo_at_zero = "N/A"
puts "Cannot find data for foo at place zero"
end
puts foo_at_zero
Однако мои результаты не то, что я ожидал. Когда я изменить if defined?
к элементу в массиве я не определен, он все еще возвращается как верно:
foo = [123, 456, 789, 012]
if defined?(foo[100]) and foo[0].is_a? Numeric
foo_at_zero = foo[0]
else
foo_at_zero = "N/A"
puts "Cannot find data for foo at place zero"
end
puts foo_at_zero
возвращает значение в foo[0].
Вероятно if defined?
не надлежащим образом проверить, является ли или нет объект существует. Есть что-то, чего я не хватает?
Проверьте значение для ноля. –
Проверьте свое состояние: 'определено? foo [100] # => "method" ' – sczizzo
' if foo [100] и foo [0] .is_a? Numeric' не является надежным утверждением, поскольку он не работает, когда 'foo.size> 100' и' foo [100] => nil'. Вы можете утверждать, что ни один элемент 'foo' не был бы установлен в' nil' здесь, но не лучше ли писать 'if (i nil'. –