Does Rubin hat eine Metaobjektprotokoll und wenn nicht, ist es möglich, eine zu implementieren?

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

  •  27-09-2019
  •  | 
  •  

Frage

Pardon meine Unwissenheit, aber was ist ein Metaobjektprotokoll und hat Ruby-eins haben? Wenn nicht, ist es möglich, einen für Ruby zu implementieren? Welche Funktionen könnte ein Metaobjektprotokoll besitzen, wenn Rubin war ein haben?

War es hilfreich?

Lösung

Was ist ein Metaobjektprotokoll?

Die beste Beschreibung ich kenne ist aus dem Class::MOP Dokumentation:

  

Ein Metaobjekt-Protokoll ist ein API auf ein Objekt System.

     

Um genauer zu sein, es abstrahiert die Komponenten eines Objektsystems (Klassen, Objekt, Methoden, Objektattribute, etc.). Diese Abstraktionen können dann verwendet werden, um zu überprüfen und das Objekt System zu manipulieren, die sie beschreiben.

     

Es kann gesagt werden, dass es zwei MOPs für jedes Objekt-System; die implizite MOP und die explizite MOP. Die impliziten MOP Griffe Dinge wie Methode der Versand oder die Erbschaft, die automatisch als Teil des, wie das Objekt System funktioniert passieren. Die explizite MOP der Regel übernimmt die Selbstbeobachtung / Reflexion kennzeichnet des Objektsystems.

     

Alle Objektsysteme haben implizite MOPs. Ohne ein, würden sie nicht funktionieren. Explizite MOPs sind viel seltener, und abhängig von der Sprache von restriktiver (Reflection in Java oder C #) zu weit offen variieren können (CLOS ist ein perfektes Beispiel).


Does Rubin hat ein?

Nach diesem Thread auf Wieder builtin Klassen, eingebaute Funktionen neu zu definieren? PerlMonks Artikel ich denke, die Antwort nicht (zumindest im engeren Sinne das, was ein MOP ist ).

Offensichtlich gibt es einige zappeln Raum hier so ist es wert sein könnte, eine Frage in der Perl-Seite so, weil die Class::MOP / Moose Autor hat Antwort Fragen gibt .

Andere Tipps

Wenn Sie auf die Definition näher betrachten, sehen youll, dass Ruby hat ein MOP. Ist es, wie die in CLOS? Nein, CLOS ist ein Meta-Kreis MOP Das ist sehr gut (ich würde sogar sagen, Genie), aber es ist nicht der einzig wahre Weg, werfen Sie einen Blick auf Smalltalk . Zur Umsetzung einer (sagen wir mal basic) MOP alles, was Sie brauchen, ist Funktionen zur Verfügung zu stellen, mit denen Sie Ihre Laufzeit:

  1. Erstellen oder eine neue Klasse löschen
  2. Erstellen
  3. eine neue Eigenschaft oder Methode
  4. dazu bringen, eine Klasse zu erben von einer anderen Klasse ( „die Klassenstruktur ändern“)
  5. generieren oder den Code ändern, um die Methoden einer Klasse zu definieren.

und Ruby bietet eine Möglichkeit, alle zu tun.

Auf einer seitlichen Anmerkung: Der Autor der Klasse :: MOP ist rechts (IMHO), wenn er behauptet, dass einige der Dinge, die Sie mit einem Meta-Kreis MOP tun können, kann schwierig sein, in Ruby zu tun (HAFTUNGSAUSSCHLUSS: Ich habe null, Zilch, nada Perl Wissen, so Smalltalk wie MOP vs CLOS wie MOP hier) ich denke aber sehr spezifisch die meisten von ihnen sind (ich hier über metaclass instantation denke) und es gibt Möglichkeiten zu machen Dinge funktionieren ohne sie. Ich denke, es ist alles auf dem Punkt Ansicht hängt, meta Kreis MOPs sind kühler, aber mehr auf der akademischen Seite und nicht meta Kreis MOPs sind praktischer und einfacher zu implementieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top