Ликбез по Lua

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Ликбез по Lua

Post by John Doe »

В данной теме задаём вопросы по Lua.

Для того, чтобы получить начальное представление о языке достаточно почитать какую-нибудь короткую обзорную статью, например:
Для более близкого знакомства рекомендую эти документы:
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Ликбез по Lua

Post by Shmuel »

Latest post of the previous page:

Как автор luafar, могу заверить, что ничего не может отвалиться.
Что могу предложить, уже предложил.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Ликбез по Lua

Post by gotar »

Беру то что Вы готовы дать. Теперь обновлять Far мне нельзя. :-)
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Ликбез по Lua

Post by gotar »

Я так понимаю, что python.dll и c0link-x64.dll теперь работать не будут?
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Ликбез по Lua

Post by Shmuel »

Абсолютно всё должно работать как раньше.
Фар обновлять вы можете, только заменяйте luafar3.dll после обновления.
luafar3_lfs_gcc.7z
(211.49 KiB) Downloaded 78 times
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Ликбез по Lua

Post by gotar »

Если при загрузке макросов в одном из файлов будет синтаксическая ошибка, вылезет красивая картинка на красном фоне с кнопочкой «Edit». Возможно ли сделать так, чтобы такая же картинка вызывалась при вызове loadfile. Может быть есть какие-то другие рекомендации обработки ошибок от loadfile.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Ликбез по Lua

Post by buniak_a_h »

Обратите внимание на pcall
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Ликбез по Lua

Post by Shmuel »

buniak_a_h, да, pcall можно использовать, но в вашем примере он роли не играет, т.к. функция loadfile ошибок не "выбрасывает", она всегда возвращается в место вызова.
P.S. Нет, роль играет, но отрицательную - pcall всегда будет в вашем примере возвращать true.
Last edited by Shmuel on Mon 27 Feb, 2023 00:15, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Ликбез по Lua

Post by buniak_a_h »

Shmuel, спутал с dofile
loadfile возвращает либо function, либо nil и диагностику
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Ликбез по Lua

Post by buniak_a_h »

А pcall поможет при вызове той функции, которую возвращает loadfile.
Например:

Code: Select all

local ff = loadfile('qqq.qqq')
local ok, res=pcall(ff)
return ok,res

Файл qqq.qqq:

Code: Select all

local aaa={'qqq','www','eee'}
tble.sort(aaa) -- (пропущена буква)
return aaa
приведёт к результату:
ok = false
res = qqq.qqq:2: attempt to index global 'tble' (a nil value)
Файл

Code: Select all

local aaa={'qqq','www','eee'}
table.sort(aaa) -- (всё норм)
return aaa
приведёт к результату:
ok = true
res = {'eee','qqq','www'}
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Ликбез по Lua

Post by John Doe »

@gotar
https://github.com/sonoro1234/luafilesystem

Code: Select all

Reimplement luafilesystem via LuaJIT FFI.

Docs
It should be compatible with vanilla luafilesystem: http://keplerproject.github.io/luafilesystem/manual.html#reference

What you only need is replacing require('lfs') to require('lfs_ffi').`
P.S.
Также и тут
Last edited by John Doe on Sun 13 Aug, 2023 18:05, edited 1 time in total.
https://t.me/FarManager — Telegram чат
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Ликбез по Lua

Post by gotar »

Нельзя ли чуть по подробнее. Где взять lfs совместимый с luafa3.dll, собранный Visual Studio, не устанавливая resty?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Ликбез по Lua

Post by John Doe »

Для того что по ссылке бинарник не нужен.
https://t.me/FarManager — Telegram чат
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Ликбез по Lua

Post by gotar »

У меня даже такая строка lua:lfs = require "lfs_ffi" local f=io.open("test", "w") lfs.lock(f,'w') вызывает падение Far. А у Вас?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Ликбез по Lua

Post by John Doe »

В таком виде тоже.
Но если файл существует, ещё не залочен, и указан с полным путём, то работает.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Ликбез по Lua

Post by John Doe »

Code: Select all

local a,b = {"a"},{"b"}
setmetatable(a,{__index=function(self,k,v)
  print(self[1])
end})
setmetatable(b,{__index=a})

return b.random
Поскольку поля random в таблице b нет, то оно "по цепочке" ищется в таблице a, а поскольку его нет и там, то запускается метод __index из метатаблицы a.
Во всём этом для меня оказался неожиданным факт, что аргументом self является таблица a, а не b.
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Ликбез по Lua

Post by Shmuel »

Так и должно быть. Как только поля random в b не нашлось, b выходит из игры, в игру вступает её метатаблица.
Да, и функция __index обрабатывает 2 аргумента, а не 3.
Last edited by Shmuel on Wed 05 Jul, 2023 21:34, edited 1 time in total.
Post Reply

Return to “Нужна помощь”