LESSON 4:
METHOD_MISSING AND ITS FRIENDS
DYNAMIC RUBY
RUBY
METHOD
LOOKUP
RUBY METHOD LOOKUP
ruby method lookup
RUBY METHOD LOOKUP
RUBY METHOD LOOKUP
Поскольку подключаемые модули
образовывают цепочку наследования,
мы можем обращаться к
одноименным методам суперкласса
через метод super.
RUBY METHOD LOOKUP
PREPEND
PRETEND
prepend позволяет нарушить
классический механизм наследования
объектов, определив подключаемому
модулю больший приоритет, чем
классу как таковому.
respect
my
authority** иначе статья 148 УК РФ
PRETEND
METHOD_MISSING
METHOD_MISSING
method_missing
METHOD_MISSING
method_missing это приватный метод,
определенный еще на уровне
BasicObject. В этой реализации он
просто вызывает исключение
NoMethodError.
METHOD_MISSING
METHOD_MISSING
Хм. Раз method_missing это просто
инстанс метод BasicObject, значит его
можно переопределить в дочерних
классах.
METHOD_MISSING
RESPOND_TO_MISSING?
RESPOND_TO_MISSING?
Сложно
искать
черную
кошку в
темной
комнате.
Особенно,
если ее
там нет.
RESPOND_TO_MISSING?
DELEGATORS
DELEGATORS
Как можно использовать мощь
method_missing? Например, при
создании делегаторов (на самом деле
ruby имеет хорошие встроенные
механизмы делегирования, такие как
модуль Forwardable и класс
SimpleDelegator, но нам важно показать
возможности method_missing).
DELEGATORS
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
nonkor@gmail.com
https://github.com/nonkor
TO BE CONTINUED…

Dynamic Ruby. Lesson #4: method_missing and its friends