2009-05-27 14 views
39

Jeśli uruchomić ten plik jako „ruby x.rb«:Co to jest "główny" w Ruby?

class X 
end 
x = X.new 

Co jest rzeczą, że dzwoni»X.new”?

Czy jest to obiekt/proces/itp.?

+1

czuję jakby to pytanie może korzystać z kontekstu to jedno: http://stackoverflow.com/questions/916795 – mipadi

+3

poproszony przez tę samą osobę. LOL – Randolpho

Odpowiedz

46

Wszystko w Ruby występuje w kontekście jakiegoś obiektu. Obiekt na najwyższym poziomie nazywa się "głównym". Jest to po prostu instancja obiektu ze specjalną właściwością, że wszelkie zdefiniowane tam metody są dodawane jako metody instancji obiektu (dzięki czemu są one dostępne wszędzie).

Tak więc możemy zrobić skrypt, na które składają się wyłącznie z:

puts object_id 
@a = 'Look, I have instance variables!' 
puts @a 

i będzie drukować „105640” i „Spójrz, mam zmienne instancji”.

Nie jest to coś, z czym zazwyczaj trzeba się martwić, ale ono istnieje.

+1

Niektóre z pozostałych odpowiedzi mówią, że "interpreter ruby" wywołuje nową metodę. Ale myślę, że mówisz, że przed tym zdarzeniem jest jakiś pośredni krok. I to jest, że instancja obiektu jest tworzona, a całe wykonanie odbywa się za pośrednictwem tego obiektu. Naprawdę staram się tylko wypełnić puste pola w moim rozumieniu tego, w jaki sposób "nowa" metoda zostaje przekazana jako wiadomość do obiektu X. Z tego, co mówisz, wynika, że ​​główna (instancja Object) przekazuje nową metodę jako wiadomość do instancji klasy X. Czy jestem coraz bliżej? – lorz

+0

Cóż, myślę, że technicznie można powiedzieć, że to interpreter Ruby robi * wszystko *, ponieważ to właśnie faktycznie wykonuje twój kod. Ale z punktu widzenia języka, tak, twój opis brzmi dokładnie tak. Na najwyższym poziomie, kiedy po raz pierwszy zaczynasz pisać w Ruby, jesteś w kontekście tego obiektu. Większość ludzi nie używa najwyższego poziomu, jak obiekt, ale jest to jeden. – Chuck

+2

Uwaga: ta odpowiedź jest nieco nieaktualna. Metoda zdefiniowana w przestrzeni nazw 'main' jest teraz" magicznie "dodana do' BasicObject', która podklasuje 'Object' jak w Ruby 1.9. – steel

3

To klasa X. Jesteś wywołanie metody „nowy”, który tworzy obiekt klasy X. Tak więc, jeśli uruchomić ten tekst jako skrypt, Ruby:

  • tworzy nową klasę X, która jest podklasą Object, a które automatycznie (jako podklasa obiektu) dziedziczy niektóre metody, z których jedną jest new.
  • ustawia nazwę x
  • wywołuje metodę new na tej nowej klasy X, tworząc obiekt X instancji; x otrzymuje odniesienie do tego obiektu.
+0

Myślę, że on odnosi się do jakiegoś punktu wejścia. – Geo

2

To interpreter Ruby uruchamiając linię

x = X.new 

jak w wielu językach skryptowych, skrypt interpretuje się od góry do dołu zamiast standardowej metody punktu wejścia jak większość zebranych językach.

+0

Tak, myślę, że osoba zadająca to pytanie odnosiła się do "głównego" z perspektywy programisty C.Wszyscy tutaj wydają się myśleć o obiekcie najwyższego poziomu o nazwie 'main' w Ruby, co nie jest całkiem tym samym. – Ajedi32

1

Jak powiedział Charlie Martin, X.new jest wołaniem do konstruktora klasy X, który zwraca obiekt typu X zapisany w zmiennej x.

Na podstawie Twojego tytułu, myślę, że szukasz trochę więcej. Ruby nie potrzebuje głównej, wykonuje kod w takiej kolejności, w jakiej go widzi. Więc zależności muszą być włączone przed ich wywołaniem.

Więc twoim głównym jest każdy kod w stylu proceduralnym, który jest napisany poza definicją klasy lub modułu.

+1

Czy ruby ​​- "stawia siebie". Wyświetli się "główny". Jest to obiekt kontekstowy najwyższego poziomu. – Chuck

+0

Chodzi mi o to, że nie deklarujesz głównej metody, ponieważ oryginalny plakat zdawał się sugerować w jego pytaniu. –

12

Wywoływacz najwyższego poziomu to obiekt główny, który jest obiektem klasy.

Wypróbuj ten program Ruby

p self 
p self.class