@ProLua

Страница 216 из 307
Group Butler [beta]
25.12.2017
04:18:03
Добро пожаловать в чат pro.lua, Danil! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Добро пожаловать в чат pro.lua, ShadoWalkeR! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

ShadoWalkeR
25.12.2017
09:37:15
Вопрос к знатокам - есть файл с примерно таким содержанием local tbl = {} tbl.abc = function() print a; end; tbl.def = function() end; return tbl; Как мне в теле def дернуть abc? Какой нибудь selftable или чтото в этом духе есть?

Google
Чай
25.12.2017
09:47:44
tbl.abc()?

ShadoWalkeR
25.12.2017
09:48:28
attempt to index global 'tbl' (a nil value)

Обожаю буфер обмена в линуксе

Aleksey
25.12.2017
09:49:29
https://habrahabr.ru/post/259265/

Чай
25.12.2017
09:49:31
Почему её нет, если ты её только что чуть выше определил?

Aleksey
25.12.2017
09:49:36
вот тут хорошо написано

Чай
25.12.2017
09:49:48
Или ты хочешь где-то переопределить def?

ShadoWalkeR
25.12.2017
09:50:24
Потому что я дергаю это извне. Там таблица присваивается переменной и local tbl походу уже не существует

Чай
25.12.2017
09:51:05
Используй переменную, к которой присваиваешь эту таблицу.

Название переменной другое, но таблица-то та же самая.

ShadoWalkeR
25.12.2017
09:52:42
Используй переменную, к которой присваиваешь эту таблицу.
То есть если я поменяю внешнюю переменную, мне потом по всему скрипт менять её?

Чай
25.12.2017
09:53:21
Зачем?

Мало информации, чтобы даже понять, что ты хочешь.

Google
ShadoWalkeR
25.12.2017
09:54:33
Мне нужно внутри одной функции таблицы дернуть другую функцию этой таблицы, не прибегая к каким либо внешним идентификаторам

Чай
25.12.2017
09:56:23
Приведи минимальный листинг, на котором видно проблему.

И да, print a — синтаксически неверная конструкция.

ShadoWalkeR
25.12.2017
09:57:29
templates.lua; local tbl ={ ["checkDials"] = function(context,exten) —логика end; ["phone_check"] = function(context, exten) —нужно вызвать checkDials end; } return tbl; extensions.lua: template = dofile(GLOBALS.ETC .. "templates.lua"); extensions = {}; extensions["outgoing"] = { ["_X."] = template.phone_check; }

Привязываться к template не вариант - это говнокод

Чай
25.12.2017
10:04:12
local tbl tbl = { ....

Или как в первом примере: сначала создаёшь таблицу, затем записываешь в неё функции.

ShadoWalkeR
25.12.2017
10:07:46
Ну, а в рантайме у меня tbl не существует

Чай
25.12.2017
10:08:08
А ты попробовал?

На момент исполнения функций очень даже существует, но в твоём примере они её не "видят".

ShadoWalkeR
25.12.2017
10:10:23
Мда

В некоторых моментах продуманность ЯП в тупик ставит

Vadim
25.12.2017
12:54:36
Опишу другой пример: Рекурсивная функция загружается из файла, имя можно произвольное дать. Как рекурсивной функции вызвать саму себя если она не знает своего имени?

ShadoWalkeR
25.12.2017
12:56:57
Забавно ведет себя Lua в некоторых моментах

Vadim
25.12.2017
13:04:24
do local function hello(x) if x then print("hello, x") hello() else print("dude hi") end end hello(1) hi=hello end hello = nil hi(2) Вот поди, разберись. Прочитал, что так должно работать. Но почему? Кто на ПК, загрузите через require / dofile вместо do ... end - работает?

Upvalues in Lua https://www.lua.org/pil/27.3.3.html https://www.lua.org/pil/23.1.2.html

Snusmumriken
25.12.2017
16:33:24


Страница 216 из 307