Ликбез по Lua

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

Ликбез по Lua

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

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

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

Shmuel
Posts: 5038
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Shmuel » Fri 05 Oct, 2012 01:55

@zg
Твой пример переписывается так:

Code: Select all

Keys(cond and "F1" or "F2")

User avatar
DAtaMan
Posts: 262
Joined: Wed 24 Jun, 2009 10:01
Location: не отсюда

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by DAtaMan » Fri 05 Oct, 2012 13:10

Shmuel wrote:

Code: Select all

Keys(cond and "F1" or "F2")
Или из примера "Выделить слово под курсором":

Code: Select all

Keys(Object.Selected and "CtrlU" or "CtrlShiftRight")
А можно поподробнее про эту "магию"?
Ведь...
spring_manual.chm wrote: Keys (...)
Параметры:
Один или больше аргументов типа string. Каждый аргумент может
содержать несколько ключей, разделённых пробельными символами.
Возвращает:
ничего
Описание:
Послать один или более ключей Фару.
Что за and и or со строками?
2B OR NOT 2B = FF (Иногда code - это просто код. Почти Дйерф Омолш Днумзигис)
To ban or not to ban, that is the question. ©

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

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by 2useven10 » Fri 05 Oct, 2012 13:19

сравните:
find "far" test.txt && echo found || echo not found

Shmuel
Posts: 5038
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by Shmuel » Fri 05 Oct, 2012 13:27

DAtaMan wrote: Что за and и or со строками?
Почитайте в мануале Lua описание операций and и or. Они отличаются от того, что от них ожидает Си-программист.

Keys(cond and "F1" or "F2") равносильно следующему:

Code: Select all

if cond then Keys("F1") else Keys("F2") end

User avatar
NightRoman
Posts: 5849
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 8 times
Contact:

Re: Идея о замене макроязыка Фара на Lua, JavaScript и т.п.

Post by NightRoman » Fri 05 Oct, 2012 13:41

The conjunction operator and returns its first argument if this value is false or nil; otherwise, and returns its second argument. The disjunction operator or returns its first argument if this value is different from nil and false; otherwise, or returns its second argument.

User avatar
ur4ltz
Posts: 76
Joined: Fri 08 Jan, 2010 14:07
Location: Харьков
Has thanked: 1 time

Re: Spring — внедрение Lua в качестве макроязыка

Post by ur4ltz » Fri 05 Oct, 2012 20:26

Это будет в тему lua.
C сайта смотреть не нужно..
http://scite-ru.googlecode.com/files/Pr ... %202ed.pdf
Думаю что этот файл удалят.. Авторское право на его может быть..

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

Re: Spring — внедрение Lua в качестве макроязыка

Post by SUSim » Sun 07 Oct, 2012 20:22

А можно ли получить содержимое переменной имея строку с её именем?
Типа:
a=1; b=ХОЧУ_ЗНАТЬ_ЧТО_В_ПЕРЕМЕННОЙ("a")


PS По моему, отдельный раздел для обсуждения языка Lua не помешал бы.
SimSU ··· ·· -- ··· ··-

Shmuel
Posts: 5038
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Shmuel » Sun 07 Oct, 2012 20:55

SUSim wrote:А можно ли получить содержимое переменной имея строку с её именем?
Типа:
a=1; b=ХОЧУ_ЗНАТЬ_ЧТО_В_ПЕРЕМЕННОЙ("a")
Можно так:

Code: Select all

b = getfenv().a or _G.a

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

Re: Spring — внедрение Lua в качестве макроязыка

Post by Max Rusov » Sun 23 Dec, 2012 21:09

Вопрос по LUA для общего развития. Если функция возвращает, например, 2 значения - есть возможность проверить оба в условии, не заводя для них локальные переменные? Т.е. переписать след. код без локальных переменных:

Code: Select all

local Found, Index = FindSomething()
if Found and Index > 0 then 
  --
end

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

Re: Spring — внедрение Lua в качестве макроязыка

Post by zg » Sun 23 Dec, 2012 21:26

Code: Select all

if (function(Found,Index) return Found and Index > 0 end)(FindSomething()) then
  --
end

Shmuel
Posts: 5038
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Shmuel » Sun 23 Dec, 2012 21:35

Max Rusov wrote:Вопрос по LUA для общего развития. Если функция возвращает, например, 2 значения - есть возможность проверить оба в условии, не заводя для них локальные переменные? Т.е. переписать след. код без локальных переменных: [......]
Нет такой возможности.
Но раз уж об этом зашла речь, есть пару вещей, неочевидных для начинающих, а именно:
-- все возвращаемые значения могут быть непосредственно переданы другой функции, без явного создания локальных переменных (как в примере zg)
-- все возвращаемые значения могут быть помещены в таблицу, также без создания локальных переменных
Например:

Code: Select all

foo(a, b, FindSomething())
bar = { a, b, FindSomething() }
Обратите внимание, что в обоих случаях вызов FindSomething() идёт последним в списке. Иначе будет соответственно передано или вставлено только первое возвращаемое значение.

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

Re: Spring — внедрение Lua в качестве макроязыка

Post by Max Rusov » Sun 23 Dec, 2012 21:43

Понятно. Просто я первый раз встретил язык, который имеет такую фишку. Получается, что при использовании функции в составе выражения все значения кроме первого - теряются. Жалко, думал авторы LUA и тут что-нибудь интересное предусмотрели. Ну да ладно.

Shmuel
Posts: 5038
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Shmuel » Sun 23 Dec, 2012 21:53

Max Rusov wrote:Получается, что при использовании функции в составе выражения все значения кроме первого - теряются.
Ну а как вы себе это представляете, выражения ведь могут быть самые разные, например

Code: Select all

a and (b or c) or not d
(и это я намеренно взял только логические). Вот для этого как раз можно создать функцию:

Code: Select all

function CheckReturns(a,b,c,d) return a and (b or c) or not d end

if CheckReturns(FindSomething()) then ...... else ...... end

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

Re: Spring — внедрение Lua в качестве макроязыка

Post by Max Rusov » Sun 23 Dec, 2012 22:22

Shmuel wrote:Ну а как вы себе это представляете
Не знаю. Но придумали же они синтаксис с присвоением, я такого тоже не ожидал. Ну, может, как то так:

Code: Select all

if FindSomething(),Index and Index > 0 then

Shmuel
Posts: 5038
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Shmuel » Sun 23 Dec, 2012 22:25

Увы, такого нет.

Post Reply

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

Who is online

Users browsing this forum: No registered users and 2 guests