Перейти к содержимому
  • 0
Jet

Функция load

Вопрос

Данная функция имеет такой вид:

 

var = load(codestring, arg2, arg3, tableEnviroment)

Возвращает она функцию, сформированную из строчки кода, переданной в параметре codestring.

Параметр tableEnviroment это таблица, задающая "окружение", т.е. все функции и переменные будут взяты из этой таблицы.

 

У меня конкретный вопрос: что делают параметры arg2 и arg3? Какие типы они имеют?

 

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


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

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

Функция load(chunk, chunkname, mode, env) загружает кусок кода и возвращает функцию.

Если параметр chunk — строка, то и кусок — строка. Если это функция, то load будет вызывать её и объединять возвращаемое строковое значение с другими. Например, file:read можно прицепить туда.

chunkname используется для дебаг-сообщений и описаний об ошибке. Например, интерпретатор Луа в OpenComputers устанавливает значение, равное "stdin", так что ошибки получаются рода:

stdin:1: ...
Stacktrace:
...

mode задаёт, как интерпретировать строку куска.

  • "b" — только как байт-код (типа той, что string.dump возвращает);
  • "t" — только как Луа-код (по умолчанию в OpenComputers);
  • "bt" — определить автоматически (по умолчанию в стандартном Луа).

Аргумент env задаёт переменные, доступные загружаемому через load коду. Как, например, print есть в глобальном окружении, вот похожим образом можно задавать свои. Например, _ENV — окружение программы, из который вызывается функция.

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

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


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

Данная функция имеет такой вид:

var = load(codestring, arg2, arg3, tableEnviroment)

Возвращает она функцию, сформированную из строчки кода, переданной в параметре codestring.

Параметр tableEnviroment это таблица, задающая "окружение", т.е. все функции и переменные будут взяты из этой таблицы.

 

У меня конкретный вопрос: что делают параметры arg2 и arg3? Какие типы они имеют?

Сейчас не совсем уверен, но на сколько я знаю arg3 может быть "t", "b" или "tb". Этот аргумент указывает на то, читать ли функцию если она представлена как текст или как байт код или и то и то. Но не уверен. P.S. Чтение байткода нужно разрешать в конфиге.

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


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

Функция load(chunk, chunkname, mode, env) загружает кусок кода и возвращает функцию.

Если параметр chunk — строка, то и кусок — строка. Если это функция, то load будет вызывать её и объединять возвращаемое строковое значение с другими. Например, file:read можно прицепить туда.

chunkname используется для дебаг-сообщений и описаний об ошибке. Например, интерпретатор Луа в OpenComputers устанавливает значение равное "stdin", так что ошибки получаются рода:

stdin:1: ...
Stacktrace:
...

mode задаёт, как интерпретировать строку куска.

  • "b" — только как байт-код (типа той, что string.dump возвращает);
  • "t" — только как Луа-код (по умолчанию в OpenComputers);
  • "bt" — определить автоматически (по умолчанию в стандартном Луа).

Аргумент env задаёт переменные, доступные загружаемому через load коду. Как, например, print есть в глобальном окружении, вот похожим образом можно задавать свои. Например, _ENV — окружение программы, из который вызывается функция.

Да, именно этого я и ждал. Прекрасно, спасибо за исчерпывающий ответ!

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...