Программные ошибки не являются крайними случаями
Хм. В первом примере вы присваиваете 5
для tmp
, тем самым определяя символ tmp
, а затем обнаруживаете, что class Fixnum
действительно отвечает на to_s
. Но в первом случае неудачи вы пытаетесь поставить точку на неопределенном символе ... это однопроходный интерпретатор ... и оператор не может быть проанализирован.
Не совсем "крайний случай", и я должен задаться вопросом, думали ли вы, что сравниваете tmp
и foo
.
Во втором случае вы создаете локальную переменную x
, но оставляете ее nil
из-за if false
, а затем естественным образом обнаруживаете, что nil
не имеет +
метода. Если вы закомментируете строку, метод x
виден и вызывается.
Это называется лексическая область действия , а не "крайний случай".