Спецификация для Complex#to_i
такова, как Урсус и Джон Болингер говорят в своем ответе.
Причина, по которой Complex#to_i
определена (и, следовательно, не вызывает ошибку NoMethoError
), заключается в том, что она возвращаетРасчетное значение, когда мнимая часть не равна нулю, и, следовательно, его необходимо определить.Вы не можете поднять NoMethodError
только для некоторых экземпляров класса.
Причина, по которой оно не вызывает более знакомое исключение, скажем ArgumentError
, заключается в том, что это не аргумент, априемник.
Чтобы выдать ошибку для определенных экземпляров класса, наилучшее совпадение получилось RangeError
;нет другого Exception
класса, который, кажется, подходит лучше.