Если вы посмотрите ближе к определению, вы увидите, что Ruby имеет MOP. Это как в CLOS? Нет, CLOS - это метакруглая MOP , которая великолепна (я бы даже сказал, гениально), но это не единственный верный способ, взгляните на Smalltalk . Для реализации (скажем, базового) MOP все, что вам нужно, это предоставить функции, которые позволяют вашей среде выполнения:
- Создать или удалить новый класс
- Создать новое свойство или метод
- Заставить класс наследоваться от другого класса («изменить структуру класса»)
- Создание или изменение кода, определяющего методы класса.
И Руби предоставляет способ сделать все это.
С другой стороны: автор Class :: MOP прав (ИМХО), когда утверждает, что некоторые вещи, которые вы можете сделать с мета-циклическим MOP, может быть трудно сделать в Ruby (ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: У меня есть ноль, zilch, nada знание Perl, так что я думаю о Smalltalk как MOP против CLOS как MOP здесь), но большинство из них очень специфичны (я имею в виду инстанцирование метакласса здесь) и есть способы сделать вещи работать без них. Я думаю, что все зависит от вашей точки зрения, мета-циклические СС более круче, но больше с академической стороны, а не-мета-циклические СС более практичны и проще в реализации.