LESSON 4: METHOD_MISSING AND ITS FRIENDS DYNAMIC RUBY
RUBY METHOD LOOKUP
Поскольку подключаемые модули образовывают цепочку наследования, мы можем обращаться к одноименным методам суперкласса через метод super.
PRETEND
prepend позволяет нарушить классический механизм наследования объектов, определив подключаемому модулю больший приоритет, чем классу как таковому.
METHOD_MISSING
method_missing это приватный метод, определенный еще на уровне BasicObject. В этой реализации он просто вызывает исключение NoMethodError.
METHOD_MISSING
Хм. Раз method_missing это просто инстанс метод BasicObject, значит его можно переопределить в дочерних классах.
DELEGATORS
Как можно использовать мощь method_missing? Например, при создании делегаторов (на самом деле ruby имеет хорошие встроенные механизмы делегирования, такие как модуль Forwardable и класс SimpleDelegator, но нам важно показать возможности method_missing).
BLOCKS, PROCS AND LAMBDAS
REFERENCES
▸ https://blog.jcoglan.com/2013/05/08/how-ruby-method-dispatch-works/
▸ http://dev.af83.com/2012/10/19/ruby-2-0-module-prepend.html
▸ https://makandracards.com/makandra/23171-how-ruby-method-lookup-works
▸ http://blog.marc-andre.ca/2010/11/15/methodmissing-politely/
▸ https://habrahabr.ru/post/269785/
THANK YOU!
Alex Mikitenko [email protected] https://github.com/nonkor