1.2.3

## Приложение A - Глоссарий

This topic has missing or partial documentation. Please help us improve it.

See How-To - Write Documentation

Здесь даны определения терминов и фраз используемых в языке программирования Ruby и конкретно в этой реализации. Смотри также книгу “Язык программирования Ruby” авторов Флэнегана и Мацумото [O’Reilly 2008] и “Programming Ruby: The Pragmatic Programmer’s Guide” второе или третье издание автора Томаса и др. [The Pragmatic Programmers 2005-2008]

- метакласс

  Также известен как +синглетон+ и +eigenclass+. Каждый объект в Ruby может иметь один метакласс, который создается только при необходимости. Метакласс содержит таблицу методов и констант, которая принадлежит только определенному объекту. Например, описанный ниже метод +hello+ существует только в метаклассе объекта +obj+.

      obj = Object.new
      def obj.hello
        puts 'hi'
      end

  Так как все классы в Ruby также являются объектами, они тоже могут иметь метаклассы. Методы, которые называют “методами класса”, являются просто методами в таблице методов, принадлежащей метаклассу класса. Метод +honk+ существует в метаклассе класса +Car+.

      class Car
        def self.honk
        end
      end

  В Rubinius, метаклассы являются объектами класса MetaClass. Доступ к метаклассу объекта можно получить вызовом метода +metaclass+. Схему, описанную здесь, в целом иногда называют “Метаобъектный протокол” или +MOP+.

- поиск методов или разрешение методов

  Простое правило: взять объект, который находится в слоте класса этого объекта (это значение невсегда равнозначно результату вызова Object#class) и начать искать.

  Поиск идет по цепочке родительских классов, пока родитель не будет равен nil.

  В этом случае повторяется поиск для метода method_missing. Если и этот метод не будет найден – трагедия.

                                            +----------------+
                                            |      nil       |
                                            +----------------+
                                                    ^
                                                    | superclass
                                                    |
                                            +----------------+
                                            |     Object     |
                                            +----------------+
                                                    ^
                                                    | superclass
                                                    |
                                            +----------------+
                                            |     Module     |
                                            +----------------+
                                                    ^
                                                    | superclass
                                                    |
                                            +----------------+
                                            |     Class      |
                                            +----------------+
                                                    ^
                                                    | superclass
                                                    |
                                            +----------------+
                                            | SingletonClass |
                                            |    (Object)    |
                                            +----------------+
                                                    ^
                                                    | superclass
                                                    |
       +-------------+                      +----------------+
       |      F      |  ----------------->  | SingletonClass |
       +-------------+   singleton class    |      (F)       |
                                            +----------------+

      class Class
        def wanker
          puts 'you are'
        end
      end

      class F
        def self.bloke
          wanker
        end
      end

  1. Поиск метода ‘wanker’ будет произведен в таблицах методов:

     1. MetaClass(F)
     2. MetaClass(Object)
     3. Class

  Найден

- таблица методов

  Структура данных, присутствующая в каждом классе (и модуле), которая содержит список методов, определенных в этом классе.

  В Rubinius таблица методов класса – это объект класса LookupTable.

- MatzRuby

  Смотри MRI

- MRI

  Matz’s Ruby Interpreter или Matz’s Ruby Implementation. Аббревиатура для обозначения официальной реализации Ruby. Смотри http://ruby-lang.org.

- приватный вызов

  Вызов метода, у которого явно не указан получатель. Получатетелем является +self+. Например:

      class A
      private
        def you_are_mine
        end
      end

      class B < A
        def sunshine
          you_are_mine
        end
      end

      class C
        def dear
          today = B.new
          today.you_are_mine
        end
      end

  Вызов метода +you_are_mine+ в методе +sunshine+ назвается приватным вызовом. Вызвать +today.you_are_mine+ не удасться, потому что приватные методы не могут иметь явного получателя. В данном случае объект +today+ является явным получателем.

- родительский класс

  Это класс, от которого наследуется другой класс. Класс Object является родительским классом всех объектов, которые явно не наследуются от других классов.

      class A
      end

      class B < A
      end

  Класс A наследуется от класса Object. Иными словами A.superclass == Object. Класс B явно наследуется от класса A, таким образом B.superclass == A.