поднять "NullPointerException" в Ruby - PullRequest
2 голосов
/ 10 июля 2009

Раньше я много работал с Java, а теперь больше работаю с Ruby. Однако я не могу понять одну вещь: что такое рубиновый эквивалент Java "NullPointerException"? Я хочу проверить переменные, когда я вхожу в функцию, и если они равны нулю, я хочу вызвать исключение такого типа. Существует ли определенный класс ошибок ruby, чтобы вызвать исключение такого типа?

Ответы [ 3 ]

8 голосов
/ 10 июля 2009

Возникновение ArgumentError может удовлетворить вашу ситуацию. Вы могли бы сделать что-то вроде этого:

def i_dont_take_nils_from_nobody x
  raise ArgumentError.new "You gave me a nil!" if x.nil?
  puts "thanks for the #{x}"
end

i_dont_take_nils_from_nobody nil
 #=> ArgumentError: You gave me a nil!
i_dont_take_nils_from_nobody 1
 #=> thanks for the 1
5 голосов
/ 10 июля 2009

Список исключений не содержит таких вещей.

nil - это объект, и элементы можно проверить, чтобы убедиться, что они не равны nil.

result = Base.find(blah)
result.nil?

Вызов метода по nil, которого нет у nil (объекта), должен дать вам исключение NoMethodError.

result = Base.find(blah) #returning no result
result.my_advanced_functionality(42)

Поскольку результат равен nil, а объект nil не определяет функцию my_advanced_functionality, вы получите NoMethodError

Одна из вещей, которые я вижу, когда узнаю, - «Вы по ошибке назвали id для nil, что будет 4» (потому что id объекта nil - 4)

В heirarchy исключения есть исключение ArgumentError, которое я никогда не использовал, но похоже, что оно может вам пригодиться.

2 голосов
/ 10 июля 2009

В ruby ​​нет нулевых указателей, но вы все равно можете вызвать исключение, если хотите:

>> class NullPointerException &lt Exception; end
=> nil
>> raise NullPointerException
NullPointerException: NullPointerException
    from (irb):2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...