
Alxius
24.12.2017
15:05:10

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