Ликбез по Lua

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

Ликбез по Lua

Post by John Doe »

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

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

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

Post by Shmuel »

@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 »

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: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

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

Post by 2useven10 »

сравните:
find "far" test.txt && echo found || echo not found
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

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: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

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 »

Это будет в тему lua.
C сайта смотреть не нужно..
http://scite-ru.googlecode.com/files/Pr ... %202ed.pdf
Думаю что этот файл удалят.. Авторское право на его может быть..
User avatar
SUSim
Posts: 1633
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 25 times

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

Post by SUSim »

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


PS По моему, отдельный раздел для обсуждения языка Lua не помешал бы.
SimSU ··· ·· -- ··· ··-
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

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

Code: Select all

b = getfenv().a or _G.a
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

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

Post by Max Rusov »

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

Code: Select all

local Found, Index = FindSomething()
if Found and Index > 0 then 
  --
end
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

Code: Select all

if (function(Found,Index) return Found and Index > 0 end)(FindSomething()) then
  --
end
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

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

Code: Select all

foo(a, b, FindSomething())
bar = { a, b, FindSomething() }
Обратите внимание, что в обоих случаях вызов FindSomething() идёт последним в списке. Иначе будет соответственно передано или вставлено только первое возвращаемое значение.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

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

Post by Max Rusov »

Понятно. Просто я первый раз встретил язык, который имеет такую фишку. Получается, что при использовании функции в составе выражения все значения кроме первого - теряются. Жалко, думал авторы LUA и тут что-нибудь интересное предусмотрели. Ну да ладно.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

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
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

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

Post by Max Rusov »

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

Code: Select all

if FindSomething(),Index and Index > 0 then
Post Reply

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