A "Követelés" módszer Rubinban

Annak érdekében, hogy újrafelhasználható komponenseket lehessen létrehozni, amelyek könnyen használhatók más programokban, a programozási nyelvnek képesnek kell lennie arra, hogy a kódot zökkenőmentesen importálhassa futásidejűleg. Ban ben Rubin, az kíván A metódust egy másik fájl betöltésére és az összes fájl végrehajtására használják nyilatkozatok. Ez az összes osztály és osztály importálását szolgálja eljárás a fájlban szereplő meghatározások. Amellett, hogy egyszerűen végrehajtja az összes állításot a fájlban, a Request metódus nyomon követi a korábban megkövetelt fájlokat is, így kétszer nem igényel fájlokat.

A „igényel” módszer használata

Az igénylő módszer a fájl nevét veszi igénybe, mint a húr, egyetlen érvként. Ez lehet egy út a fájlhoz, például ./lib/some_library.rb vagy rövidített név, például some_library. Ha az argumentum elérési út és teljes fájlnév, akkor a szükséges módszer megkeresi a fájlt. Ha azonban az argumentum rövidített név, akkor a megkövetelési módszer a rendszer számos előre definiált könyvtárában keresi meg a fájlt. A rövidített név használata a leggyakoribb módszer a szükséges módszer használatához.

instagram viewer

A következő példa bemutatja, hogyan kell használni a Igénylés nyilatkozatot. A fájl test_library.rb az első kódblokkban van. Ez a fájl nyomtat egy üzenetet és meghatároz egy új osztályt. A második kódblokk a fájl test_program.rb. Ez a fájl betölti a test_library.rb fájlt az therequiremethod segítségével, és létrehoz egy új TestClass tárgy.

"tesztkönyvtárat tartalmaz"
osztály TestClass
def inicializálása
"TestClass objektumot készített"
vég
vég
#! / usr / bin / env ruby
megköveteli a 'test_library.rb'
t = TestClass.new

Kerülje a névkonfliktusokat

Újrahasznosítható komponensek írásakor a legjobb, ha nem deklarál sok változót a globális hatályban, osztályokon vagy módszereken kívül, vagy a $ előtagot. Ennek célja a "névtér szennyezésMsgstr "Ha túl sok nevet deklarál, akkor egy másik program vagy könyvtár ugyanazt a nevet deklarálja, és név összecsapást okozhat. Amikor két teljesen független könyvtár véletlenül megváltoztatja egymás változóit, a dolgok eltörnek - látszólag véletlenszerűen. Ez egy nagyon nehéz hibakeresés, és legjobb, ha elkerüljük.

A névütközések elkerülése érdekében a könyvtárában mindent beilleszthet egy a modul nyilatkozat. Ehhez az embereknek hivatkozniuk kell osztályaira és módszerére egy teljesen képzett névvel, például MyLibrary:: my_method, de megéri, mivel a név összecsapása általában nem fordul elő. Azok számára, akik szeretnék, hogy az összes osztály- és módszerneved globális hatályban legyen, ezt megtehetik a tartalmaz nyilatkozat.

A következő példa megismétli az előző példát, de mindent beilleszt A könyvtáram modult. Két verziója my_program.rb adottak; amelyik a tartalmaz nyilatkozatot, és amelyik nem.

"tesztkönyvtárat tartalmaz"
MyLibrary modul
osztály TestClass
def inicializálása
"TestClass objektumot készített"
vég
vég
vég
#! / usr / bin / env ruby
megköveteli a 'test_library2.rb'
t = MyLibrary:: TestClass.new
#! / usr / bin / env ruby
megköveteli a 'test_library2.rb'
tartalmazza a MyLibrary-t
t = TestClass.new

Kerülje az abszolút ösvényeket

Mivel az újrafelhasználható komponensek gyakran mozognak, az is legjobb, ha az igényelt hívások során nem használunk abszolút útvonalakat. Az abszolút út olyan út, mint /home/user/code/library.rb. Észre fogja venni, hogy a fájlnak abban a pontos helyen kell lennie, hogy működjön. Ha a szkriptet valaha áthelyezik, vagy az otthoni könyvtár valaha megváltozik, akkor az utasítás megkövetelése nem működik.

Az abszolút utak helyett gyakran általános a ./lib könyvtár a Ruby program könyvtárában. Az ./lib könyvtár hozzáadódik a $ LOAD_PATH változó, amely azokat a könyvtárakat tárolja, ahol a szükséges módszer Ruby fájlokat keres. Ezután, ha a fájl my_library.rb a lib könyvtárban található, egyszerűen betölthető a programba megkövetelni a „Saját könyvtárat” nyilatkozat.

A következő példa megegyezik az előzővel test_program.rb példák. Feltételezi azonban, hogy test_library.rb A fájl a ./lib könyvtárat és betölti a fent leírt módszerrel.

#! / usr / bin / env ruby
$ LOAD_PATH << './lib'
megköveteli a 'test_library.rb'
t = TestClass.new
instagram story viewer