[#] [Из песочницы] Ghost Methods в Ruby (перевод)
habrabot(difrex,1) — All
2015-10-29 19:00:03


_Предлагаю вашему вниманию перевод фрагмента книги [Metaprogramming Ruby 2][1] за авторством Паоло Перротта (Paolo Perrotta)._

#### Что такое method\_missing?

В Руби мы можем вызывать методы которые не существуют, но это будет возвращать нам ошибку. Для примера:

class Lawyer; end
nick = Lawyer.new
nick = talk_simple

NoMethodError: undefine method 'talk_simple' for #<Lawyer:0x007f801aa81938>


Помните ли вы как работает поиск методов? Когда вы вызываете метод talk\_simple, Ruby идет в класс объекта nick, и перебирает там методы. Если он не может найти метод там, он ищет его в родителей данного класса, потом в Object и наконец в BasicObject. Ну и поскольку Ruby не может нигде найти метод talk\_simple, он запускает метод method\_missing для nick’a. Ruby знает что этот метод есть, потому, что это приватный метод BasicObject от которого наследуются все объекты. [Читать дальше →][2]

[1]: https://pragprog.com/book/ppmetr2/metaprogramming-ruby-2
[2]: http://habrahabr.ru/post/269785/#habracut