Мой подход к этому основан на принятии ограничений поставленной проблемы (расширить реализацию method_missing на Numeric, даже если @coreyward указывает, что это действительно неправильный подход для всего, что не является проблемой домашней работы) было следующим:
Понимание того, что 5.euros.in(:yen)
можно перевести на:
eur = 5.send(:euros)
eur.send( :in, yen )
в сущности происходит то, что мы отправляем сообщение евро в Числовой 5, а затем отправляем метод in
для числового результата 5.euros с параметром: иена.
В method_missing вы должны ответить на вызов euros
и вернуться с результатом конвертации евро в доллары, а затем (также в method_missing) ответить на вызов in
с результатами конвертации долларов (из предыдущий вызов) для символа, переданного в качестве параметра для вызова in
. Это вернет правильное значение.
Конечно, вы можете конвертировать в / из любой валюты, которую хотите, при условии, что ваши коэффициенты конвертации верны - с учетом данной конкретной проблемы конвертация в / из долларов казалась наиболее разумной.