Чему должен быть равен ex.class? - PullRequest
0 голосов
/ 10 марта 2012

Я пытаюсь выучить ruby, используя код, скачанный с этого сайта .

Я застрял в этой точке.

  def test_you_dont_get_null_pointer_errors_when_calling_methods_on_nil
    # What happens when you call a method that doesn't exist.  The
    # following begin/rescue/end code block captures the exception and
    # makes some assertions about it.
    begin
      nil.some_method_nil_doesnt_know_about
    rescue Exception => ex
      # What exception has been caught?
      assert_equal NoMethodError, ex.class

  # What message was attached to the exception?
  # (HINT: replace __ with part of the error message.)
  assert_match(/__/, ex.message)
end

конец

Я должен заменить __ на часть сообщения об ошибке, но мне это не удалось. Что ж, так и было, потому что после нескольких попыток я просто заменил его пробелом, поскольку решил, что в сообщении об ошибке есть пробелы между словами. Но как мне увидеть сообщение об ошибке?

1 Ответ

6 голосов
/ 10 марта 2012

Здесь вы получите NoMethodError:

>> def tst
>>   nil.an_unknown_meth
>> rescue Exception => ex
>>   puts ex.class
>>   puts ex.message
>> end
 => nil 

>> tst
NoMethodError
undefined method `an_unknown_meth' for nil:NilClass

То есть NoMethodError для класса и /undefined method .* for nil:NilClass/ в качестве сообщения должно соответствовать.

Подробнее о NoMethodError и обычно для исключений Ruby в ruby-docs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...