Ликбез по Lua

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

Ликбез по Lua

Post by John Doe » Mon 02 Jul, 2012 05:41

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

Для того, чтобы получить начальное представление о языке достаточно почитать какую-нибудь короткую обзорную статью, например:
Для более близкого знакомства рекомендую эти документы:

User avatar
John Doe
Бюрократ
Posts: 11264
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 84 times

Ликбез по Lua

Post by John Doe » Mon 22 Jun, 2015 16:57

Latest post of the previous page:

http://www.lua.org/manual/5.1/manual.html#pdf-io.close
Подозреваю где-то в вашем коде переменная file оказывается неинициализирована.
Можно попробовать заменить на io.close(assert(file))

iva
Posts: 123
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Ликбез по Lua

Post by iva » Mon 22 Jun, 2015 17:05

Спасибо. Вроде разобрался. В долго-работающем экземпляре Far я когда-то выполнил

Code: Select all

local file = io.output("file")  file:close()
Это и привело к проблеме.

User avatar
John Doe
Бюрократ
Posts: 11264
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 84 times

Ликбез по Lua

Post by John Doe » Tue 07 Jul, 2015 20:54

Есть ли разница между io.stdout и io.output() ?

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

Ликбез по Lua

Post by Shmuel » Tue 07 Jul, 2015 21:07

John Doe wrote:Есть ли разница между io.stdout и io.output() ?
При запуске интерпретатора, наверное, разницы нет. Но если исполнить io.output("foo.txt"),
то с этого момента разница будет.

User avatar
John Doe
Бюрократ
Posts: 11264
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 84 times

Ликбез по Lua

Post by John Doe » Mon 27 Jul, 2015 13:56

Code: Select all

local t = {
  a=true,
  a={},
  a="str",
  a=0,
  a=false,
  a=nil,
}
far.Show(t.a)
Мануал не регламентирует поведение в этом случае.

Интуитивно кажется, что результат должен равняться последней строке определения таблицы, т.е. 0.
Или первой, т.е. true.
А в реальности "побеждает" a={}.

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

Ликбез по Lua

Post by Shmuel » Mon 27 Jul, 2015 14:01

John Doe wrote: А в реальности "побеждает" a={}.
Это верно для LuaJIT 2.0.4.
Для Lua 5.1, 5.2 и 5.3 побеждает nil.

User avatar
SUSim
Posts: 1477
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 4 times
Been thanked: 4 times

Ликбез по Lua

Post by SUSim » Thu 24 Sep, 2015 19:30

Ковырял, ковырял, но не смог изменить штатными средствами макроса дату каталога (ну кроме вызывания диалога атрибутов клавишами)
Хотел оптом изменить атрибут времени у нескольких элементов.

Если изменить время файла средствами lua невозможно, подскажите ffi код позволяющий изменить время файла/директории.

Идея макроса такова - при обновлении какого либо файла обновляется время всех родительских папок, чтобы из корня видеть и добраться до всех последних изменений.
SimSU ··· ·· -- ··· ··-

User avatar
HaRT
Moderator
Posts: 8076
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 100 times

Ликбез по Lua

Post by HaRT » Thu 24 Sep, 2015 19:32

Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
SUSim
Posts: 1477
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 4 times
Been thanked: 4 times

Ликбез по Lua

Post by SUSim » Thu 24 Sep, 2015 19:37

HaRT wrote:
В первом приближении хоть вручную, т.е. я изменил файл нажал кнопку и время всех родительских папопок изменилось на текущее.
Вопрос именно про возможность изменения времени а не только атрибутов средствами ЛУА.
SimSU ··· ·· -- ··· ··-

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

Ликбез по Lua

Post by Shmuel » Thu 24 Sep, 2015 19:53

FFI. SetFileTime. Или искать готовую библиотеку. Похоже, что в LuaFAR нет подходящей функции.

Karagy
Posts: 56
Joined: Tue 02 May, 2006 08:43
Location: Питер
Been thanked: 3 times

Ликбез по Lua

Post by Karagy » Wed 10 Feb, 2016 23:34

Предлагаю добавить в шапку замечательный перевод о истории языка Эволюция языка расширений: история Lua.
Кстати, раскрывающий пользу консервативности при разработке. А то я тут насмотрелся метаний с "total folder size in panel" - яркий пример неконсервативного подхода -)

P.S. Часть ссылок в шапке - уже мёртвые.

buniak_a_h
Posts: 355
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 37 times
Been thanked: 5 times
Contact:

Ликбез по Lua

Post by buniak_a_h » Sun 17 Jul, 2016 19:40

John Doe wrote:Дело в том, что стандартные функции lua не рассчитаны на работу с массивами, содержащими nil.
В вашей SHOW надо учесть количество элементов, и указывать его в unpack.
См. функцию select.
http://plugring.farmanager.com/downld/files/lookdbf.zip
Не подскажете, где можно прочитать об этой и аналогичных странностях LUA? Согласитесь, ситуация когда
lua:=unpack({1,nil,'q',false,nil,'zzz'})
возвращает

Code: Select all

1│ 1
2│ nil
3│ q
4│ false
5│ nil
6│ zzz
а тоже самое без второго элемента
lua:=unpack({1,'q',false,nil,'zzz'})
возвращает

Code: Select all

1│ 1
2│ q
3│ false
очень напоминает ошибку...
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
zg
zero-gravity
Posts: 5266
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 44 times
Contact:

Ликбез по Lua

Post by zg » Sun 17 Jul, 2016 20:15

buniak_a_h wrote:очень напоминает ошибку...
http://www.freelists.org/post/luajit/le ... e-arrays,3

User avatar
Aidar
Posts: 533
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 6 times
Contact:

Ликбез по Lua

Post by Aidar » Sun 17 Jul, 2016 20:20



buniak_a_h
Posts: 355
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 37 times
Been thanked: 5 times
Contact:

Ликбез по Lua

Post by buniak_a_h » Sun 17 Jul, 2016 20:31

Aidar wrote:
<...>
2.5.5 - Получение длины
...
Длиной таблицы t считается любой целый индекс n такой, что t[n] не равен nil, а t[n+1] равно nil.
Не объясняет первый пример. Либо должно работать одинаково (до первого nil-а), либо всё же похоже на ошибку.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

User avatar
John Doe
Бюрократ
Posts: 11264
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 84 times

Ликбез по Lua

Post by John Doe » Sun 17 Jul, 2016 20:34

buniak_a_h wrote: до первого nil-а
Такого в мануале нет

gene.pavlovsky
Posts: 163
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

Ликбез по Lua

Post by gene.pavlovsky » Thu 10 Nov, 2016 14:19

Сделал вот такие три функции


Хочется их вынести в modules/stringutil.lua и подключать его из макросов, где нужно
Вопросы:
1) Если просто убрать local, и подключать модуль require "stringutil" - ф-ции становятся доступными и работают.
Красиво ли так поступать, или есть какая-то другая общепринятая практика? При проверке luacheck-ом он выдаёт warnings: setting non-standard global variable "substr" и остальные.
2) В идеале хочется, чтоб при подключении require "stringutil" эти ф-ции появлялись в string, и можно было писать str:substr(...).
Попробовал добавить string.substr = substr в конце stringutil.lua - ошибок нет, но при попытке задействовать str:substr(...) ругается на substr - nil value. Как бы это оформить?

Post Reply

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