|
|
|
Lua |
|
|
DarkMaster |
3.10.2017, 6:52
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27725
Пользователь №: 11.279
|
В чем прикол? Код function t (options) log(options) end t{crds={1,2,3,4}} Код t={} function t.f (options) log(options) end t.f(123) Не работает: Код t={} function t.f (options) log(options) end t.f{crds={1,2,3,4}} Работает: Код t={} function t.f (options) log(options) end t:f{crds={1,2,3,4}} В чем фишка? Вообще насколько я понял : передает в качестве параметра саму же функцию. Как связаны эти проблемы убей не пойму.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
DarkMaster |
4.10.2017, 2:37
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27725
Пользователь №: 11.279
|
Список допустимых упрощенных записей: Цитата Код f{...} f({...}) f('...') f'...' f("") f"" f([[...]]) f[[...]] x:f(...) x.f(x, ...) Так же хочу обратить внимание, что подобная упрощенная запись нормально воспринимается при: function f(options) но не воспринимается при: f = {} function f.v (options) Если этот код запихать в интерпретатор луа - все работает. Беру дллку от этого интерпретатора, засовываю в пилот не работает. Ничего не понимаю. Сообщение отредактировал DarkMaster - 4.10.2017, 2:38
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
DarkMaster |
4.10.2017, 5:48
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27725
Пользователь №: 11.279
|
Цирк продолжается: Код function print(val) log(val) end
function g (v) if v == nil then v = 0 end return 100 + v end
do local default = {} default.crds = function (b) print(b) return g(b) end function f (b) return default.crds(b) end end print(f(3)) Орет про то, что данные переданы таблицей. Таблицы там нет и в помине. При этом мой table.show даже развернуть ее не смог ибо там какой-то бред. Берем этот же самый код и пихаем в интерпретатор луа - все шуршит. Если функцию объявлять, как: Код function default.crds (b) то все опять начинает работать. Открываем любой справочник, маны, доки. Функция является базовым типом и запись полностью корректна. -- Functions are first-class, may be local/global. -- These are the same: function f(x) return x * x end f = function (x) return x * x end Сообщение отредактировал DarkMaster - 4.10.2017, 6:02
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
DarkMaster |
4.10.2017, 6:22
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27725
Пользователь №: 11.279
|
Продолжаем развлекаться: Код default = {} function default.crds (window) get ("windowpos ".. window .. " #x #y #w #h") x, y, w, h = "#x", "#y", "#w", "#h" log (x, y, w, h, 197) return {x, y, w, h, abs=0} end
options = {} options.crds = default.crds("workwindow") table.show(options.crds) log(options.crds[1]) Вывод в лог просто не может оставить равнодушным. Полная солянка из значений, имен переменных. При этом: options.crds[1] = options.crds[1] + 1 выбьет ошибку, что производятся арифметические действия со стрингом options.crds[1] = tonumber(options.crds[1]) + 1 сообщит, что арифметические действия производятся с nil. Видимо tonumber() так же в options.crds[1] видит не значение, а имя переменной и соответственно возвращает nil.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|