LESSON 2: METHODS AND MODULES DYNAMIC RUBY
CLASS METHODS
SINGLETON CLASS
С учетом еще одного простого, но очень важного определения…
…предыдущий вывод стоит дополнить корректирующим:
CLASS METHODS
Технически, никакого class method как обособленного понятия не существует, это всегда просто чей-то singleton method.
CLASS << SELF
Но возникает вопрос. Как эти singleton methods (которые мы знаем как “class methods”) наших метаклассов наследуются?
Они же должны быть в другой цепочке наследования (идут к Class и выше)…
А вот как:
PUBLIC, PROTECTED, PRIVATE
Protected и private методы выполняют немного иную функцию, чем в массе прочих объектных языков (C++, например).
Например, и protected, и private методы всегда наследуются. Но…
PRIVATE
Private не может вызываться в ином контексте, чем в контексте (теле) объекта, для которого он объявлен. Явное указание receiver-а запрещено.
PROTECTED
Protected может вызываться контексте (теле) всех объектов, принадлежащих к тому же классу.
MODULES
Модули отличаются от классов тем, что
1) не могут порождать экземпляры;
2) не имеют системы наследования;
3) в основном используются для расширения классов.
INCLUDE VS EXTEND
В самом простом смысле можем говорить, что include добавляет методы экземпляра класса, а extend - методы класса.
INCLUDED
Существует хук, выполняющийся при подключении модуля. #included.
Кроме всего прочего, он позволяет одновременно добавлять методы непосредственно к классу и его экземплярам.
METHODS AND MODULES
REFERENCES
▸ http://matthodan.com/2010/08/08/ruby-private-methods-vs-protected-methods.html
▸ http://culttt.com/2015/06/03/the-difference-between-public-protected-and-private-methods-in-ruby/
▸ https://habrahabr.ru/post/143483/
THANK YOU!
Alex Mikitenko [email protected] https://github.com/nonkor