2010-10-31 10 views
5

Wybacz moją ignorancję, ale co to jest protokół Metaobject i czy Ruby ma jeden? Jeśli nie, czy możliwe jest zaimplementowanie jednego dla Ruby? Jakie funkcje może posiadać protokół Metaobject, jeśli miałby je mieć Ruby?Czy Ruby ma protokół Metaobject, a jeśli nie, czy można go zaimplementować?

+0

to pomaga? http://stackoverflow.com/questions/1061908/scoping-of-open-classes-in-ruby-versus-mop-in-groovy – zengr

+0

Gdzie usłyszałeś termin "Metaobject"? –

+1

@Andrew, CLOS: http://www.lisp.org/mop/concepts.html – horseyguy

Odpowiedz

1

Co to jest protokół Metaobject?

Najlepszy opis Natknąłem się z dokumentacją Class::MOP:

Meta protokół przedmiot jest API do systemu nawigacji.

Mówiąc dokładniej, abstrakcyjnie komponenty systemu obiektowego (klasy, obiekt, metody, atrybuty obiektu itp.). Te abstrakcje mogą następnie zostać wykorzystane do sprawdzenia i manipulowania systemem obiektów, który opisują.

Można powiedzieć, że istnieją dwa MOPy dla dowolnego systemu obiektowego; niejawny MOP i jawny MOP. Niejawne MOP obsługuje takie rzeczy jak wysyłanie lub dziedziczenie metod, które odbywają się automatycznie w ramach działania systemu obiektowego. MOP jawny zwykle obsługuje funkcje introspekcji/refleksji systemu obiektowego.

Wszystkie systemy obiektowe mają domyślne MOP. Bez jednego nie działałyby. Jawne MOP-y są znacznie rzadsze i zależnie od języka mogą się różnić od restrykcyjnych (Odbicie w Javie lub C#) do szeroko otwartego (CLOS jest doskonałym przykładem).


Czy Ruby mają jeden?

Według tego wątku na Reopening builtin classes, redefining builtin functions?Perlmonks artykule Myślę, że odpowiedź jest nr (przynajmniej w ścisłym znaczeniu tego, co jest MOP).

Najwyraźniej jest tu jakiś pokój do pisania, więc warto napisać pytanie po stronie Perla SO, ponieważ autor Class::MOP/Moose odpowiada na questions there.

+2

Dzięki za informację, jednak czytając pierwszy link "Reopining builtin classes ..." Wydaje się, że autor naprawdę dostaje dużą ilość jego komentarz do Rubiego jest zły, co podważa jego punkt widzenia. Większość tego, co stwierdza w Ruby jako trudne lub niemożliwe do wykonania, jest w Ruby bardzo łatwe. Chciałbym zobaczyć artykuł o podobnej naturze napisany przez kogoś, kto jest biegły zarówno w Rubim jak i Perlu :) Dzięki! – horseyguy

0

Jeśli przyjrzysz się bliżej definicji, zobaczysz, że Ruby ma MOP z. Czy jest podobny do tego w CLOS? Nie, CLOS to meta-kolista MOP , która jest świetna (powiedziałabym nawet geniusz), ale nie jest to jedyna prawdziwa metoda, spójrz na Smalltalk. Wdrożenie (powiedzmy podstawowy) MOP Wszystko czego potrzebujesz to, aby zapewnić funkcje, które pozwalają swój czas pracy do:

  1. Tworzenie lub usuwanie nową klasę
  2. Utwórz nową właściwość lub metoda
  3. spowodować klasa dziedziczy z innej klasy ("zmień strukturę klas")
  4. Wygeneruj lub zmień kod definiujący metody klasy.

I Ruby zapewnia sposób na zrobienie tego wszystkiego.

Na marginesie: autor Class :: MOP ma rację (IMHO), gdy twierdzi, że niektóre z rzeczy, które można zrobić za pomocą MOP z meta-kolą, mogą być trudne w Rubim (DISCLAIMER: Mam zero, zilch, nada Wiedza Perla, więc myślę, że Smalltalk jak MOP vs CLOS jak MOP tutaj), ale większość z nich jest bardzo specyficzna (myślę tutaj o metaclassie) i istnieją sposoby, aby wszystko działało bez nich . Myślę, że wszystko zależy od twojego punktu widzenia, meta-kołowe MOP-y są fajniejsze, ale bardziej po stronie akademickiej i MOP-y o niezmiennym metrum są bardziej praktyczne i łatwiejsze do wdrożenia.

Powiązane problemy