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

Для того, чтобы получить начальное представление о языке достаточно почитать какую-нибудь короткую обзорную статью, например:
Для более близкого знакомства рекомендую эти документы:
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

LUA - как?

Post by AleXH »

Latest post of the previous page:

Поскольку форум не профильный, отвечать совершенно не обязательно, только если есть время и желание помочь.

1. var_name = 2; local var_name = 5

rawget(_G,"var_name") возвратит значение глобальной var_name, а как получить значение локальной, т.е. текущее?

2. Как получить случайное значение? math.random(n,m) возвращает всегда "n" %)
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Post by John Doe »

1. См. debug.
Или сформулируйте задачу детальнее.

2. Так быть не должно, перепроверьте.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Ликбез по Lua

Post by AleXH »

John Doe wrote: Или сформулируйте задачу детальнее
например:
a,b,n,x = 1,2,3,4
local a,b,n,x = 4,3,2,1
t = {"a","b","n","x"}
for _,v in pairs(t) do print(rawget(_G,v)) end -- выводим значения глобальных a,b,n,x
Какую крякозяблу :) вместо "_G" написать, чтобы вывести текущие значения a,b,n,x?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Post by John Doe »

Ссылка на крякозяблу выше.
Но какова цель этих манипуляций? Если не отладка, то подозреваю что вы не с той стороны подошли к решению.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Ликбез по Lua

Post by AleXH »

Понадобилось распараллелить на несколько нитей (потоков) скрипт с сохранением значений переменных в файл. В конце работы каждая нить проверяет содержимое файла, и если отработали все, то значения из файла загружаются и обрабатываются.
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 »

Для чего это?

Code: Select all

a,b,n,x = 1,2,3,4
local a,b,n,x = 4,3,2,1
И это?

Code: Select all

for _,v in pairs(t) do print(rawget(_G,v)) end -- выводим значения глобальных a,b,n,x
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Ликбез по Lua

Post by AleXH »

Это я как пример привёл, что глобальные переменные извлечь могу, а текущие нет.
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 »

С этого мы начали, и ответ вы уже получили.

Однако я пока не вижу для чего в вашей задаче так изощряться.
Если нужно запомнить исходное значение переменных, то можно сохранить его например в таблице.

Code: Select all

local t1 = {a=1,b=2,n=3,x=4}
local t2 = {a=4,b=3,n=2,x=1}
P.S.
AleXH wrote: глобальные переменные извлечь могу, а текущие нет
"Глобальные" переменные хранятся в окружении. Окружение представляет собой таблицу, соответственно применимы все методы работы с таблицами.
А вот никаких "текущих" нет, есть локальные. Надо понимать, что механизм доступа к ним отличается. Не существует никакой таблицы с локальными переменными.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Post by John Doe »

И ещё одно: глобальное окружение G это совсем не то же самое что окружение текущей функции.
Поэтому не знаю что вам там rawget возвращает
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Ликбез по Lua

Post by AleXH »

Скрипт (4-е копии, ака потоки) выполняются под pure lua, не под FAR, rawget по тестам возвращает глобальные значения переменных. С возвращением локальных не разобрался - плюнул, объявил их глобальными, сэкономил себе время. Каждый поток выполняется от 20 до 40 мин, потому и стал извращаться, выполнять последовательно в одном потоке слишко-ом долго.
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 »

AleXH wrote: rawget по тестам возвращает глобальные значения переменных
Считайте это случайностью, на практике текущее окружение не обязано соответствовать _G.
Впрочем вряд ли это всё вообще вам нужно.
AleXH wrote: Каждый поток выполняется от 20 до 40 мин, потому и стал извращаться
По прежнему не вижу ни малейшей связи между фрагментом условия задачи, и фрагментом её решения.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

Ликбез по Lua

Post by LanKing »

Last edited by LanKing on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Спрятан офтопик
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Ликбез по Lua

Post by HaRT »

LanKing wrote: Хочу сделать far.text определённого цвета форегранда и бекграунда.
Какое это имеет отношение к теме «Ликбез по Луа»?!
Тщательнее выбирайте тему для своих сообщений. Хватит разводить офтопик!
Фар есть инструмент, а не нянька. © 2009 DrKnS
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Ликбез по Lua

Post by AleXH »

Есть таблица, , возможно ли в функции использовать не имя таблицы _G.country_t, а что-то типа self, обращаясь к содержимому ЭТОЙ ЖЕ глобальной таблицы?
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://lua-users.org/wiki/ObjectOrientationTutorial
http://www.lua.org/pil/16.html
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Ликбез по Lua

Post by AleXH »

:) это вопрос общего плана - если использовать self вместо имени таблицы, то всё работает для локальных таблиц, но для глобальных нет, поэтому решил спросить у более опытных товарищей. Задавать гуглу размытые вопросы сложно.
Last edited by AleXH on Tue 16 Dec, 2014 13:29, edited 1 time in total.
Post Reply

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