Ликбез по Lua

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

Ликбез по Lua

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

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

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

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

Re: Ликбез по Lua

Post by John Doe » Thu 11 Apr, 2013 16:31

Latest post of the previous page:

Shmuel wrote:Вот в этом (из stdlib.h)
В этом не может быть, т.к. возвращает явно больше 32767: lm:post print(math.random(2^30))
Плюс непонятная реакция на значения в интервале 2^31 .. 2^73

Shmuel
Posts: 5158
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 144 times

Re: Ликбез по Lua

Post by Shmuel » Thu 11 Apr, 2013 16:37

John Doe wrote:
Shmuel wrote:Вот в этом (из stdlib.h)
В этом не может быть, т.к. возвращает явно больше 32767: lm:post print(math.random(2^30))
Плюс непонятная реакция на значения в интервале 2^31 .. 2^73
Причина именно в том, что я сказал. Я не утверждал, что результат ограничен величиной RAND_MAX.

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

Re: Lua Explorer „Advanced“

Post by John Doe » Sun 19 May, 2013 08:04

Таблицы сортируются в lua explorer так: table.sort(items, function(v1, v2) return v1.text < v2.text end)

Пытаюсь использовать другую функцию сортировки
table.sort(items, function() return true end)

Получаю: C:\apps\far3\Profile\Macros\modules\le.lua:125: invalid order function for sorting
Не могу понять как такое возможно. Если return false то без ошибок.

Проблему могу воспроизвести только в lua explorer
Бред какой-то...

Max Rusov
Posts: 3600
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 7 times

Re: Lua Explorer „Advanced“

Post by Max Rusov » Sun 19 May, 2013 08:25

John Doe wrote:Не могу понять как такое возможно
Может там защита стоит от "левых" функций? Некоторые алгоритмы сортировки при такой функции просто зациклятся...

2useven10
Posts: 2983
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

Re: Ликбез по Lua

Post by 2useven10 » Sun 19 May, 2013 13:16

true - действительно 'левая' ф-я, т.к. a < b & b < a & a < a.
false - вполне валидна, если не учитывать, что все элементы равны друг другу.

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

Re: Ликбез по Lua

Post by John Doe » Sun 19 May, 2013 13:20

Max Rusov wrote:Может там защита стоит от "левых" функций?
Вы правы, об этом и сказано в сообщении об ошибке.

Но в таком случае помогите найти ошибку:
  1. local t = {1,{2},3,4}
  2. table.sort(t, function (a,b)
  3.     if (type(a)=="table" or type(b)=="table") and
  4.        not (type(a)=="table" and type(b)=="table") then
  5.          return type(a)=="table"
  6.     else
  7.        return  tostring(a)<tostring(b)
  8.     end
  9. end)
  10. require"le"(t)
Цель: отсортировать так, чтобы элементы-таблицы были в начале.

2useven10
Posts: 2983
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

Re: Ликбез по Lua

Post by 2useven10 » Sun 19 May, 2013 13:38

а в чём проблема? если скормить это lua.exe -- всё работает.

2useven10
Posts: 2983
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

Re: Ликбез по Lua

Post by 2useven10 » Sun 19 May, 2013 13:46

  1. local t = {1,{2},3,4}
  2. table.sort(t, function (a,b)
  3.   if (type(a)=="table" or type(b)=="table") and not (type(a)=="table" and type(b)=="table") then
  4.     return type(a)=="table"
  5.   else
  6.     return  tostring(a)<tostring(b)
  7.   end
  8. end);
  9. print(tostring(t[1]), tostring(t[2]), tostring(t[3]), tostring(t[4]))

Code: Select all

table: 000000000033BC50 1       3       4

Max Rusov
Posts: 3600
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 7 times

Re: Ликбез по Lua

Post by Max Rusov » Sun 19 May, 2013 13:52

  1. if (type(a)=="table" or type(b)=="table") and not (type(a)=="table" and type(b)=="table") then
Можно короче:
  1. if (type(a)=="table") ~= (type(b)=="table")) then

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

Re: Ликбез по Lua

Post by John Doe » Sun 19 May, 2013 14:04

2useven10
Да, это я перемудрил, проблема оказывается была в lua explorer

Кстати

Code: Select all

print(tostring(t[1]), tostring(t[2]), tostring(t[3]), tostring(t[4]))
1. tostring не нужен, стандартный print это сам
2. перечислять массив не нужно, есть функция unpack
  1. print(unpack(t))
Max Rusov
Таблицы вперёд, но и остальное тоже надо отсортировать (в условиях я не оговорил, да)

Max Rusov
Posts: 3600
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 7 times

Re: Ликбез по Lua

Post by Max Rusov » Sun 19 May, 2013 14:09

John Doe wrote:Таблицы вперёд, но и остальное тоже надо отсортировать (в условиях я не оговорил, да)
Я только про отквоченный фрагмент.

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

Re: Ликбез по Lua

Post by John Doe » Sun 19 May, 2013 15:08

Спасибо, что-то xor мне тяжело даётся :-)

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: Ликбез по Lua

Post by AleXH » Thu 27 Jun, 2013 08:30

Разыскивается Lua.exe одним файлом, в котором встроенный движок регэкспов заменён на PCRE как в RESearch cavaler.

Shmuel
Posts: 5158
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 144 times

Re: Ликбез по Lua

Post by Shmuel » Thu 27 Jun, 2013 09:01

AleXH wrote:Разыскивается Lua.exe одним файлом, в котором встроенный движок регэкспов заменён на PCRE
- Файл один, но 32-битная lua5.1.dll ему нужна (можно взять из дистрибутива Фара)
- PCRE есть, но и встроенный движок регекспов Lua на месте
Attachments
lua51x.exe.7z
(122.77 KiB) Downloaded 88 times

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

Re: Ликбез по Lua

Post by John Doe » Thu 27 Jun, 2013 09:11

Code: Select all

This is a Lua interpreter with the additional libraries:
    bit      : Lua BitOp
    lpeg     : LPeg 0.10
    rex_pcre : PCRE 8.32 2012-11-30 + Lrexlib 2.6.0 (for PCRE)
    lfs      : LuaFileSystem 1.5.0
    sysutils : sysutils, build Sep 17 2012
lrexlib

Shmuel
Posts: 5158
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 144 times

Re: Ликбез по Lua

Post by Shmuel » Thu 27 Jun, 2013 09:17

Запустите файл, там выдаётся информация по используемым библиотекам. Все, кроме sysutils, можно найти отдельно в Интернете.

AleXH: из макросов Фар 3 можно использовать встроенную библиотеку regex, она сопоставима с PCRE. Её описание - в luafar_manual.chm.

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

Re: Ликбез по Lua

Post by Aidar » Sat 29 Jun, 2013 06:07

Ещё одна страница, обучающая Lua,- в виде lua-скрипта: Learn Lua in 15 Minutes (на английском языке, ссылка от GlukKazan).

Post Reply

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