Методът „Изисквай“ в Ruby

click fraud protection

За да се създадат компоненти за многократна употреба, такива, които могат лесно да се използват в други програми, езикът на програмиране трябва да има някакъв начин за гладко импортиране на този код по време на изпълнение. в рубин, the изисква метод се използва за зареждане на друг файл и изпълнение на всички негови изявления. Това служи за импортиране на всички класове и метод дефиниции във файла. В допълнение към простото изпълнение на всички отчети във файла, методът на изискване също следи кои файлове са били изисквани преди това и по този начин няма да изисква файл два пъти.

Използвайки метода 'изисквам'

Методът на изискване приема името на файла, който изисква, като низ, като единен аргумент. Това може да бъде или път към файла, като например ./lib/some_library.rb или съкратено име, като напр some_library. Ако аргументът е път и пълно име на файла, изискващият метод ще потърси там файла. Ако обаче аргументът е съкратено име, методът изискване ще търси през няколко предварително дефинирани директории във вашата система за този файл. Използването на съкратеното име е най-често срещаният начин за използване на метода изискване.

instagram viewer

Следващият пример демонстрира как да използвате оператора изискване. Файлът test_library.rb е в първия код код. Този файл отпечатва съобщение и дефинира нов клас. Вторият кодов блок е файлът test_program.rb. Този файл зарежда test_library.rb файл с помощта на метода и създава нов TestClass обект.

поставя "test_library включена"
клас TestClass
def инициализирайте
поставя "TestClass обект създаден"
край
край
#! / usr / bin / env рубин
изискват „test_library.rb“
t = TestClass.new

Избягвайте сблъсъци с име

Когато пишете компоненти за многократна употреба, най-добре е да не декларирате много променливи в глобалния обхват извън каквито и да било класове или методи или чрез използване на $ префикс. Това е за да се предотврати нещо, наречено „замърсяване в пространството на имената. "Ако декларирате твърде много имена, друга програма или библиотека може да декларира същото име и да предизвика сблъсък на име. Когато две напълно несвързани библиотеки започнат случайно да променят променливите един на друг, нещата ще се счупят - привидно на случаен принцип. Това е много труден проблем за откриване и е най-добре просто да го избегнете.

За да избегнете сблъсъци с имена, можете да затворите всичко в библиотеката си вътре в модул изявление. Това ще изисква хората да се позовават на вашите класове и метод от напълно квалифицирано име, като например MyLibrary:: my_method, но си заслужава, тъй като обикновено сблъсъци с имената няма да се появят. За хората, които искат да имат всички имена на вашия клас и методи в глобалния обхват, те могат да направят това с помощта на включва изявление.

Следващият пример повтаря предишния пример, но затваря всичко в a MyLibrary модул. Две версии на my_program.rb са дадени; този, който използва включва изявление и такова, което не.

поставя "test_library включена"
модул MyLibrary
клас TestClass
def инициализирайте
поставя "TestClass обект създаден"
край
край
край
#! / usr / bin / env рубин
изискват 'test_library2.rb'
t = MyLibrary:: TestClass.new
#! / usr / bin / env рубин
изискват 'test_library2.rb'
включва MyLibrary
t = TestClass.new

Избягвайте абсолютните пътища

Тъй като компонентите за многократна употреба често се придвижват наоколо, също така е най-добре да не използвате абсолютни пътища в обажданията си. Абсолютен път е път като /home/user/code/library.rb. Ще забележите, че файлът трябва да е на точното място, за да работи. Ако скриптът някога бъде преместен или домашната ви директория някога се промени, това изискване на заявление ще спре да работи.

Вместо абсолютни пътища често е обичайно да се създаде а ./lib директория в директорията на вашата програма Ruby. Най- ./lib директория се добавя към $ LOAD_PATH променлива, която съхранява директории, в които методът за търсене търси Ruby файлове. След това, ако файлът my_library.rb се съхранява в директорията lib, може да се зареди във вашата програма с просто изискват „my_library“ изявление.

Следващият пример е същият като предишния test_program.rb примери. Това обаче предполага test_library.rb файл се съхранява в ./lib директория и я зарежда, използвайки описания по-горе метод.

#! / usr / bin / env рубин
$ LOAD_PATH << './lib'
изискват „test_library.rb“
t = TestClass.new
instagram story viewer