У RUBY есть MetaObject протокол, и если нет, возможно ли реализовать один?

StackOverflow https://stackoverflow.com/questions/4061579

  •  27-09-2019
  •  | 
  •  

Вопрос

Простите мое невежество, но что такое метаобъект протокол, а у Ruby есть один? Если нет, возможно ли реализовать один для Ruby? Какие особенности могут иметь протокол MetaObject, если Ruby должен был иметь один?

Это было полезно?

Решение

Что такое протокол MetaObject?

Лучшее описание, которое я сталкивался с Class::MOP документация:

Протокол Meta Object - это API для объектной системы.

Чтобы быть более конкретным, это рефераты компоненты объектной системы (классы, объект, методы, атрибуты объекта и т. Д.). Эти абстракции могут затем использоваться для проверки и манипулирования объектной системой, которую они описывают.

Можно сказать, что для любой объектной системы есть два швабра; неявная швабра и явная швабра. Неявная швабра обрабатывает такие вещи, как диспетчерский метод или наследование, которое происходит автоматически в рамках того, как работает объектная система. Явная моска обычно обрабатывает функции самоанализ / отражения объектной системы.

Все объектные системы имеют неявные швабры. Без одного, они не будут работать. Явные швабры намного менее распространены, и в зависимости от языка может варьироваться от ограничения (отражение в Java или C #) к широкому открытому (CLOT - идеальный пример).


У Ruby есть один?

Согласно этой теме на Вокруг встроенных классов, переопределение встроенных функций? Перлмонкс Статья Я думаю, что ответ нет (по крайней мере, в самых строгих смысле того, какая швабра).

Ясно, что здесь есть какая-то извинитель комнаты, так что это возможно, стоит разместить вопрос в стороне перл, потому что Class::MOP / лось Автор делает ответ Вопросы там.

Другие советы

Если вы смотрите ближе к определению, вы увидите, что Ruby имеет швабра. Это похоже на тот, кто в схеме? Нет, закрывается Мета-круговая швабра что здорово (я бы даже сказал Гениус), но это не один истинный способ, взгляните на Болтовня. Отказ Для реализации A (скажем, Basic) MOP Все, что вам нужно, это предоставить функции, которые позволяют вашему время выполнения:

  1. Создать или удалить новый класс
  2. Создать новое свойство или метод
  3. Привести к утешению класса от другого класса («изменить структуру класса»)
  4. Создать или изменить код, определяющий методы класса.

И Ruby предоставляет способ сделать все это.

На сбоке Примечание: автором класса :: MOP правильно (ИМХО), когда он утверждает, что некоторые из вещей, которые вы можете сделать с Meta Circular MOP, могут быть трудно сделать в Ruby (Отказ от ответственности: у меня есть ноль, зилч, нада Perl Знания, поэтому я думаю, что SmallTalk, как MOP, так как здесь, как швабра), но большинство из них очень специфичны (я думаю о приведении метаклассных здесь), и есть способы создать вещи без них. Я думаю, что все зависит от твоей точки зрения, мета круговые швабры охладителя, но больше на академической стороне, а не Meta Circular Mops более практичны и легче реализовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top