Метода "Захтевај" у Рубину

Да би се створиле компоненте за вишекратну употребу, оне које се могу лако користити у другим програмима, програмски језик мора на неки начин да несметано увози тај код у току рада. Ин Руби, тхе захтевају метода се користи за учитавање друге датотеке и извршење свих њених датотека изјаве. Ово служи за увоз свих класа и метод дефиниције у датотеци. Поред тога што једноставно извршава све изјаве у датотеци, метода захтијева такође прати које су датотеке претходно потребне и, према томе, неће требати два пута.

Коришћењем методе 'Реку'

Метода Захтев узима име датотеке коју захтева као низ, као јединствени аргумент. То може бити или пут до датотеке, као што је ./либ/соме_либрари.рб или скраћено име, као што је соме_либрари. Ако је аргумент пут и потпуно име датотеке, тражиће се метода потражити датотеку. Међутим, ако је аргумент скраћено име, метода захтијева ће претражити више унапред дефинисаних директорија у вашем систему за ту датотеку. Употреба скраћеног имена је најчешћи начин коришћења методе тражења.

instagram viewer

Следећи пример демонстрира како се користи наредба. Фајл тест_либрари.рб налази се у првом блоку кодова. Ова датотека исписује поруку и дефинише нову класу. Други блок кодова је датотека тест_програм.рб. Ова датотека учитава тест_либрари.рб датотека користећи тамокуиреметход и ствара нову ТестЦласс објекта.

ставља "тест_либрари укључен"
класа ТестЦласс
деф иницијализирати
ставља "ТестЦласс објект креиран"
крај
крај
#! / уср / бин / енв рубин
захтевају 'тест_либрари.рб'
т = ТестЦласс.нев

Избегавајте сукобе имена

Када пишете компоненте за вишекратну употребу, најбоље је не декларисати многе променљиве у глобалном обиму изван било које класе или метода или коришћењем $ префикс. Ово је за спречавање нечега што се назива „загађење простора имена. "Ако пријавите превише имена, други програм или библиотека могу прогласити исто име и узроковати сукоб имена. Када две потпуно неповезане библиотеке почну случајно мењати једни друге променљиве, ствари ће се покварити - наизглед насумично. Ово је врло тешко грешка за проналажење и најбоље је само избећи га.

Да бисте избегли сукобе имена, можете да приложите све у својој библиотеци унутар модул изјава. Због тога ће људи морати да се позивају на ваше часове и методу под потпуно квалификованим именом као што је МиЛибрари:: ми_метход, али то је вредно јер се сукоби имена углавном неће појавити. Људи који желе да сва имена ваше класе и метода буду у глобалном домену, то могу учинити користећи укључују изјава.

Следећи пример понавља претходни пример, али затвара све у а МиЛибрари модул. Две верзије ми_програм.рб су дате; онај који користи укључују изјаву и једну која не.

ставља "тест_либрари укључен"
модул МиЛибрари
класа ТестЦласс
деф иницијализирати
ставља "ТестЦласс објект креиран"
крај
крај
крај
#! / уср / бин / енв рубин
захтевају 'тест_либрари2.рб'
т = МиЛибрари:: ТестЦласс.нев
#! / уср / бин / енв рубин
захтевају 'тест_либрари2.рб'
укључују МиЛибрари
т = ТестЦласс.нев

Избегавајте апсолутне стазе

Пошто се компоненте за вишекратну употребу често померају, такође је најбоље да не користите апсолутне стазе у вашим захтевима. Апсолутни пут је такав пут /home/user/code/library.rb. Примијетићете да датотека мора бити на том тачном мјесту како би могла радити. Ако се скрипта икада премести или се ваш матични именик икад промијени, та изјава ће престати радити.

Уместо апсолутних стаза, обично је уобичајено креирати ./либ директоријум у директоријуму вашег Руби програма. Тхе ./либ директоријум је додан у $ ЛОАД_ПАТХ променљива која чува директоријуме у којима метода захтева тражи Руби датотеке. Након тога, ако датотека ми_либрари.рб се чува у директорију либ-а, може се једноставно учитати у ваш програм захтевати 'моју библиотеку' изјава.

Следећи пример је исти као и претходни тест_програм.рб примери. Међутим, претпоставља се тест_либрари.рб датотека се чува у ./либ директоријум и учитава га горе описаном методом.

#! / уср / бин / енв рубин
$ ЛОАД_ПАТХ << './либ'
захтевају 'тест_либрари.рб'
т = ТестЦласс.нев
instagram story viewer