Ликбез по 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.

Для того, чтобы получить начальное представление о языке достаточно почитать какую-нибудь короткую обзорную статью, например:
Для более близкого знакомства рекомендую эти документы:
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Ликбез по Lua

Post by Max Rusov »

Latest post of the previous page:

А почему при запуске макроса

Code: Select all

Macro {   description="test1"; area="Editor"; key="AltX"; 
  action=function()
    Keys("CtrlO")
  end;
}
Не происходит ожидаемого действия (не показывается пользовательский экран) ?
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 »

Ответ на ваш вопрос тут http://forum.farmanager.com/viewtopic.p ... 63#p124463
Вот решение http://forum.farmanager.com/viewtopic.p ... 92#p124492

А данная тема вообще не по макросам.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Ликбез по Lua

Post by Max Rusov »

Спасибо, Что-то получилось, хотя и не идеально.
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

Ликбез по Lua

Post by ccaid »

Code: Select all

> print(math.modf(0.2/0.1))
2       0
> print(math.modf(0.3/0.1))
2       1
> print(math.modf(0.4/0.1))
4       0
> print(math.modf(0.5/0.1))
5       0
> print(math.modf(0.6/0.1))
5       1
дробная часть, равная 1, это баг, или общеизвестная и неисправляемая особенность движка Lua, или это умолчательное поведение функций вывода, и если им чего-нибудь подкрутить, то будут выдавать типа 0.99999999999999999998 ?
Фар делают добрые люди
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Ликбез по Lua

Post by Shmuel »

ccaid wrote: или это умолчательное поведение функций вывода, и если им чего-нибудь подкрутить, то будут выдавать типа 0.99999999999999999998 ?
Это правильный вариант ответа. Функция print внутри использует tostring(), которая специально ограничивает количество цифр, именно для того, чтобы не было по умолчанию "неприятного" вывода типа "0.99999999999999999998".

А подкрутить можно - преобразовать в строку самим - см. функцию basicSerialize в LuaMacro\api.lua.
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

Ликбез по Lua

Post by ccaid »

для полноты картины приведу следующее:

Code: Select all

> a,b=math.modf(0.3/0.1)
> print( b==1 and '1' or b==0 and '0' or '0.xxx')
0.xxx
Фар делают добрые люди
Karagy
Posts: 57
Joined: Tue 02 May, 2006 08:43
Location: Питер
Been thanked: 3 times

Ликбез по Lua

Post by Karagy »

Для полноты картины следует начинать с такого:

Code: Select all

> print(("%g"):format(3 - 0.3/0.1))
4.44089e-016
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Ликбез по Lua

Post by Shmuel »

Ну мы же в Фаре! lua:=3-0.3/0.1
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Ликбез по Lua

Post by iva »

Обнаружил, что после выполнения io.open функция io.write перестаёт работать, работает только io.stdout:write Так и задумано?
Вот пример:

Code: Select all

local file = io.open("aaa.a","w")
file:write("Writing to file\n")
--io.write("Writing to screen\n") -- ошибка: "standard output file is closed"
io.stdout:write("Writing to stdout\n")
io.close(file)
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 »

Не воспроизводится.
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Ликбез по Lua

Post by iva »

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

Ликбез по Lua

Post by Shmuel »

iva wrote: как узнать что не в порядке с тем экземплярос Far, в котором проявляется
С Фаром думаю всё в порядке. А проявлялось по-видимому в результате ваших предыдущих действий, то-есть закрытия stdout.
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 »

http://www.lua.org/manual/5.1/manual.html#pdf-io.close
Подозреваю где-то в вашем коде переменная file оказывается неинициализирована.
Можно попробовать заменить на io.close(assert(file))
iva
Posts: 128
Joined: Sat 02 Nov, 2013 21:32
Been thanked: 3 times

Ликбез по Lua

Post by iva »

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

Code: Select all

local file = io.output("file")  file:close()
Это и привело к проблеме.
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 »

Есть ли разница между io.stdout и io.output() ?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Ликбез по Lua

Post by Shmuel »

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

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