Az inicializálás és az inicializálási módszer

01

/ 02

Az inicializálás és az inicializálási módszer

Ruby on Rails tanulása: Játssz az irb-val
brnzwngs / Flikr / CC BY 2.0

Amikor osztályt határoz meg a Ruby-ban, a Ruby új osztályobjektumot rendel hozzá a osztálynév állandó. Például, ha mondanád osztály személy; vég, ez nagyjából megegyezik a Személy = Osztály.új. Ez az osztályobjektum típusú Osztály, és számos olyan módszerrel rendelkezik, amelyek hasznosak az ilyen példányok példányainak elkészítéséhez.

02

/ 02

Példák készítése

Egy osztály új példányának elkészítéséhez hívja meg az osztályt új eljárás. Alapértelmezés szerint ez lefoglalja az osztályhoz szükséges memóriát, és visszatér referenciát az új objektumhoz. Tehát, ha új példányt szeretne készíteni a Személy osztály, akkor hívnád Person.new.

Noha ez kezdetben kissé hátrányosnak tűnik, nincs új kulcsszó Ruby-ban vagy bármilyen speciális szintaxisban. Új objektumokat szokásos módszerrel hoznak létre, amely - mind elmondva, mind készen állva - viszonylag egyszerű dolgokat hajt végre.

Az esetek inicializálása

Az üres tárgy nem túl izgalmas. Az objektum használatának megkezdéséhez előbb inicializálni kell (feltételezve, hogy van ilyen)

instagram viewer
Példányváltozók amelyet inicializálni kell). Ezt a initialize eljárás. Ruby átad minden érvet, amelyet átad SomeClass.new tovább initialize az új tárgyon. Ezután normál változó hozzárendeléseket és módszereket használhat az objektum állapotának inicializálására. Ebben a példában a Személy osztály kerül bemutatásra, amelynek initialize A metódus név és életkor argumentumot vesz fel, és hozzárendeli őket példányváltozókhoz.

osztály Személy def inicializálása (név, életkor) @ név, @age = név, kor végének vége bob = Person.new ('Bob', 34)

Ezt a lehetőséget is felhasználhatja bármilyen erőforrás beszerzésére. Nyílt hálózat aljzatok, fájlokat nyithat meg, bármilyen adatot beolvashat stb. Az egyetlen figyelmeztetés az, hogy az emberek általában nem számítanak rá initialize módszerek kudarcra. Minden esetleges hibát dokumentáljon initialize módszereket alaposan.

Objektumok rendeltetése

Általában nem pusztít el tárgyakat a Ruby-ban. Ha C ++ -ról vagy más nyelvről származsz szemetesgyűjtő nélkül, ez furcsának tűnhet. De a Ruby (és a legtöbb más hulladékgyűjtött nyelv) esetén nem pusztít el tárgyakat, egyszerűen abbahagyja a hivatkozást. A következő hulladékgyűjtési ciklusban minden tárgy, amelyre semmi nem utal, automatikusan megsemmisül. Van néhány körkörös hivatkozású hiba, de általában ez hibátlanul működik, és nem is kell „pusztítóra”.

Ha kíváncsi az erőforrásokra, ne aggódjon miatta. Amikor az erőforrást tartó objektum megsemmisül, az erőforrás felszabadul. A nyitott fájlok és a hálózati kapcsolatok bezáródnak, a memória foglalkozik stb. Csak akkor, ha bármilyen erőforrást kioszt egy C kiterjesztésben, akkor valóban aggódnia kell az erőforrások elosztása miatt. Bár nincs garancia arra, hogy a hulladékgyűjtőt mikor fogják üzemeltetni. Az erőforrások elosztásának megkönnyítése érdekében a időszerű próbáljon meg manuálisan kiszabadítani őket.

Objektumok másolata

A Ruby referencia útján halad. Ha átad egy utalást egy objektumra a eljárás, és ez a módszer olyan módszert hív, amely módosítja az objektum állapotát, nem kívánt következmények léphetnek fel. Ezenkívül a módszerek menthetik az objektumra való hivatkozást, hogy sokkal később módosítsák, késleltetett hatást okozva a hibára. Ennek elkerülése érdekében a Ruby néhány módszert kínál az objektumok másolására.

Bármely objektum másolatához egyszerűen hívja a some_object.dup eljárás. Új objektum kerül kiosztásra, és az objektum összes példányváltozója át lesz másolva. A példányváltozók másolása azonban az, amit el kellett kerülni: ezt nevezik "sekély példánynak". Ha akkor a fájlt egy példányváltozóban kellett tartania, mindkettő a lemásolt objektumokra ugyanazra utal fájlt.

Csak vegye figyelembe, hogy a másolatok sekély példányok a használat előtt dup eljárás. Lásd a cikket Mély másolat készítése Ruby-ban további információért.