В Ruby нет принудительного применения типов, а также не выполняется проверка того, какие методы используются у объекта при первом синтаксическом анализе сценария, поскольку это может быть динамически изменено при запуске приложения.
То, что делает method_missing, позволяет вам перехватывать и обрабатывать вызовы методов, которые не существуют для данного объекта. Это обеспечивает скрытую мощь практически каждого DSL (предметно-ориентированного языка), написанного на Ruby.
В этом примере каждый из 'r.iv', 'r.mm' и т. Д. На самом деле является вызовом метода для римского объекта. Конечно, у него нет метода 'iv' или 'mm', поэтому вместо этого передается управление методу method_missing, который получает имя вызванного метода, а также любые переданные аргументы.
method_missing затем преобразует имя метода из символа в строку и анализирует его как римское число, возвращая результат в виде целого числа.