Ликбез по Lua

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

Ликбез по Lua

Postby John Doe » Mon 02 Jul, 2012 05:41

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

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

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

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

Postby Shmuel » Fri 05 Oct, 2012 01:55

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

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 и т.п.

Postby 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: 2882
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 76 times

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

Postby 2useven10 » Fri 05 Oct, 2012 13:19

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

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

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

Postby 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 и т.п.

Postby 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 в качестве макроязыка

Postby ur4ltz » Fri 05 Oct, 2012 20:26

Это будет в тему lua.
C сайта смотреть не нужно..
http://scite-ru.googlecode.com/files/Programming%20in%20Lua%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 в качестве макроязыка

Postby SUSim » Sun 07 Oct, 2012 20:22

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


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

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

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

Postby 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 в качестве макроязыка

Postby 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: 5212
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 41 times
Contact:

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

Postby 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: 4957
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 125 times

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

Postby 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 в качестве макроязыка

Postby Max Rusov » Sun 23 Dec, 2012 21:43

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

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

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

Postby 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 в качестве макроязыка

Postby Max Rusov » Sun 23 Dec, 2012 22:22

Shmuel wrote:Ну а как вы себе это представляете

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

Code: Select all

if FindSomething(),Index and Index > 0 then

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

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

Postby Shmuel » Sun 23 Dec, 2012 22:25

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


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

Who is online

Users browsing this forum: No registered users and 1 guest