Перейти к публикации
Форум - ComputerCraft
  • 0
qwertyMAN

"Проблемы с зависимостью" или "ты попал на кликбейт полиморфизма"

Вопрос

Выкладываю уже второй сборник вопросов за день, которые так долго не давали мне покоя. Пора их озвучить!

Суть вопроса такая. Дан файл. Нужно в начале программы выполнить прогрузку по типу

require("settings")

Ну скажем так, это файл с настройками.

require прогружает только один раз, по этому сначала я бы хотел знать, чем его заменить, чтобы считывать файл несколько раз.

Значит при первом прочтении файла мы читаем первый "блок" данных, потом на основе их прогружаются другие файлы, далее читается следующий "блок" настроек, потом зависимые от них файлы прогружаются и ещё раз прогружается файл настроек.

То есть мне нужно несколько раз обращаться к одному файлу и по частям его считывать. Такое реализуемо в lua?

 

Ещё у меня есть непонимание того, как устроены зависимости. Как интерпретатор работает. Есть годные, краткие гайды по работе интерпретатора?

Вот например у меня намешано несколько функций. Одна зависит от другой. Например нижняя от верхней, а верхняя от нижней. И возникает вопрос, какая функция за какой должна следовать. Как именно работают зависимости? Есть ли решение в каком порядке написать две функции которые друг от друга зависят, чтобы они работали не выдавая ошибки?

Скорее всего это тупой вопрос. Но вызван он не пониманием того, как работает интерпретатор. Объясните по шагам, пожалуйста. Я джва года этого ждал.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0

Надо понимать, что такое require. У функции есть часть сишная, которую мы проигнорируем, и часть луа. Последняя очень проста.

  • Аргумент функции мы отдаём в резолвер, который возвращает найденный по данному пути файл.
  • Файл обрабатываем через load или loadfile.

Как видно, всё исполнение кода осуществляется лишь этими функциями (хотя есть ещё и dofile, к слову). Если интересно про них узнать, посылаю в мануал. А как практический пример рекуомендую изучить сырцы /lib/require.lua в OpenOS.

Изменено пользователем Fingercomp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Есть ли решение в каком порядке написать две функции которые друг от друга зависят, чтобы они работали не выдавая ошибки?

 

 

Определить функции наперед, или засунуть в таблицу.

 

 

 

local a, b
 
function a()
  ...
end
 
function b()
  ...
end

 

 

 

или:

 

 

 

local t = {}
 
function t.a()
  ...
end
 
function t.b()
  ...
end

 

 

 

Функции определяются так же, как и любые другие переменные, и подвергаются областям видимости.

local a = 5
-- тут доступна переменная a, но не b
 
do
  local c = a * 2
  -- тут доступна переменная a и c
end
 
local b = a
-- тут и a, и b, но не c
Изменено пользователем LeshaInc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Выкладываю уже второй сборник вопросов за день, которые так долго не давали мне покоя. Пора их озвучить!

Суть вопроса такая. Дан файл. Нужно в начале программы выполнить прогрузку по типу

require("settings")

Ну скажем так, это файл с настройками.

require прогружает только один раз, по этому сначала я бы хотел знать, чем его заменить, чтобы считывать файл несколько раз.

package.loaded["settings"] = nil

require("settings")

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

 

 

require прогружает только один раз, по этому сначала я бы хотел знать, чем его заменить, чтобы считывать файл несколько раз.

 

Для таких целей лучше использовать dofile.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×