Lua, Изискване, Налични функции

Ако require три включени файла в моя Lua скрипт, може ли някоя функция в някой от тези файлове след това да види (и най-важното, да извика) някоя от другите функции?

Сблъсквам се с проблема с функции, извикващи функции, които извикват други функции. Опитах се да поставя различните функции в други файлове и след това да ги include вместо да ги запиша в основния файл.

Мисля, че работи, тестовете ми са убедителни, ако не и убедителни.

Моят основен код прави това...

 require "SOME_REQUIRED_FILE_01"
 require "SOME_REQUIRED_FILE_02"
 require "SOME_REQUIRED_FILE_03"

 XYZ = 0

 File_02_Function_A()

Разгледах Сайта на Lua и намерих ТАЗИ СТРАНИЦА, но не ми е напълно ясно.

Може ли ВСЕКИ да функционира във и трите необходими файла, да види ВСЕКИ ДРУГ да функционира и в трите файла?


person User.1    schedule 25.04.2014    source източник


Отговори (1)


require е основно същото като dofile, с изключение на механизмите, които избягват зареждането на един и същи файл многократно (и някои други полезни неща като зареждащи устройства). Това означава, че те също могат да задават глобални променливи (въпреки че не трябва). Така че, ако зададете глобална променлива в един от необходимите файлове, глобалната може да се види в целия обхват на изискваната функция. Това означава и в други необходими файлове.

Като каза това, не е най-добрата практика да задавате глобални променливи в required файлове. По-добре е да върнете таблица, която има функции и променливи, експортирани от модула вътре. Тогава бихте извикали тези функции по следния начин:

local some_required_file_01 = require "SOME_REQUIRED_FILE_01"
local some_result_01 = some_required_file_01.some_function_01()
person W.B.    schedule 25.04.2014
comment
Може ли функция в първия задължителен файл да извика функция в 3-тия задължителен файл? Проблемът ми беше, че функциите извикват функции, които все още не са били срещани при изпълнение, което води до извикване на функция до нулева стойност. - person User.1; 25.04.2014
comment
По принцип да, но може да се извика само след като бъде зареден третият файл. Моля, имайте предвид, че същото може да се постигне, ако следвате съвета да не задавате никакви глобални стойности. Можете да изисквате третия файл в главния файл, но можете също да изисквате същия файл в първия файл и да извиквате функциите локално. Той е много по-чист и изисква да се уверите, че не зареждате файла два пъти. - person W.B.; 25.04.2014
comment
Благодаря, разбрах. Щракна два пъти върху вашия отговор. - person User.1; 25.04.2014