Ruby używa metody initialize
jako konstruktora obiektu. Jest to część języka Ruby, nie specyficznego dla środowiska Rails. Jest on wywoływany kiedy instanstiate nowego obiektu, takich jak:
@person = Person.new
Wywołanie metody poziomu new
klasy na Class
przydziela typ tej klasy, a następnie wywołuje obiektu initialize
metody:
http://www.ruby-doc.org/core-1.9.3/Class.html#method-i-new
Wszystkie obiekty mają domyślną metodę initialize
, która nie przyjmuje żadnych parametrów (nie trzeba jej pisać - otrzymuje się ją automagicznie). Jeśli chcesz, aby Twój obiekt robił coś innego w metodzie initialize
, musisz zdefiniować jego własną wersję.
W twoim przykładzie przekazujesz skrót do metody initialize
, która może być użyta do ustawienia domyślnej wartości @name
i @email
.
tego użyć takich jak:
@person = Person.new({name: 'John Appleseed', email: '[email protected]'})
Powodem inicjator ma wartość domyślną dla atrybutów (attributes = {}
ustawia wartość domyślną do hash ampty - {}
) jest tak, że można również nazwać bez konieczności przekazać argument. Jeśli nie podasz argumentu, to attributes
będzie pustym hashem, a zatem zarówno wartości @name
jak i @email
będą wartościami nie kluczowymi dla tych kluczy (:name
i :email
).
Para więcej punktów: mechanizm używania 'initialize' jest w rzeczywistości Rubinem, a nie Railsiem. Przekazywanie pustego skrótu jako wartości domyślnej dla atrybutów ('attributes = {}') zwróci zero podczas próby uzyskania dostępu do klucza, który nie został ustawiony w hash 'attributes [: name] # nil' - jeśli nie ma wartości domyślnej został ustawiony (jak 'initialize (attributes)' dostęp do atrybutu w metodzie spowoduje zgłoszenie błędu 'attributes [: something] # error'. – tamersalama
Dobry punkt - zredagowany w celu wyjaśnienia, że jest częścią Ruby i połączony z dokumentami Ruby które wyjaśniają "nową" metodę i sposób, w jaki się ją inicjalizuje, –
Michael i tamersalama, dziękuję za informację. Rozumiem, że teraz zainicjuj teraz: – jason328