1
0
mirror of https://github.com/adambard/learnxinyminutes-docs.git synced 2025-08-15 11:14:24 +02:00
This commit is contained in:
CoolDark
2014-11-15 22:12:40 +03:00
parent 5b8f64f5bb
commit 337fb88da9

View File

@@ -45,7 +45,7 @@ end
if num > 40 then if num > 40 then
print('больше 40') print('больше 40')
elseif s ~= 'walternate' then -- ~= обозначает "не равно". elseif s ~= 'walternate' then -- ~= обозначает "не равно".
-- Проверка равенства это == как в Python; ok для строк. -- Проверка равенства это == как в Python; работает для строк.
io.write('не больше 40\n') -- По умолчанию стандартный вывод. io.write('не больше 40\n') -- По умолчанию стандартный вывод.
else else
-- По умолчанию переменные являются глобальными. -- По умолчанию переменные являются глобальными.
@@ -54,7 +54,7 @@ else
-- Как сделать локальную переменную: -- Как сделать локальную переменную:
local line = io.read() -- Считывает введённую строку. local line = io.read() -- Считывает введённую строку.
-- Конкатенация строк использует .. оператор: -- Для конкатенации строк используется оператор .. :
print('Зима пришла, ' .. line) print('Зима пришла, ' .. line)
end end
@@ -133,10 +133,10 @@ f = function (x) return x * x end
-- Эти тоже: -- Эти тоже:
local function g(x) return math.sin(x) end local function g(x) return math.sin(x) end
local g = function(x) return math.sin(x) end local g = function(x) return math.sin(x) end
-- Equivalent to local function g(x)..., except referring to g in the function -- Эквивалентно для local function g(x)..., кроме ссылки на g в теле функции
-- body won't work as expected. -- не будет работать как ожидалось.
local g; g = function (x) return math.sin(x) end local g; g = function (x) return math.sin(x) end
-- the 'local g' decl makes g-self-references ok. -- 'local g' будет прототипом функции.
-- Trig funcs work in radians, by the way. -- Trig funcs work in radians, by the way.
@@ -151,32 +151,34 @@ print {} -- Тоже сработает.
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Таблицы = структура данных, свойственная только для Lua; это ассоциативные массивы. -- Таблицы = структура данных, свойственная только для Lua; это ассоциативные массивы.
-- Similar to php arrays or js objects, they are hash-lookup dicts that can -- Похоже на массивы в PHP или объекты в JS
-- also be used as lists. -- Так же может использоваться как список.
-- Using tables as dictionaries / maps:
-- Dict literals have string keys by default: -- Использование словарей:
-- Литералы имеют ключ по умолчанию:
t = {key1 = 'value1', key2 = false} t = {key1 = 'value1', key2 = false}
-- String keys can use js-like dot notation: -- Строковые ключи выглядят как точечная нотация в JS:
print(t.key1) -- Печатает 'value1'. print(t.key1) -- Печатает 'value1'.
t.newKey = {} -- Добавляет новую пару ключ-значение. t.newKey = {} -- Добавляет новую пару ключ-значение.
t.key2 = nil -- Удаляет key2 из таблицы. t.key2 = nil -- Удаляет key2 из таблицы.
-- Literal notation for any (non-nil) value as key: -- Литеральная нотация для любого (не пустой) значения ключа:
u = {['@!#'] = 'qbert', [{}] = 1729, [6.28] = 'tau'} u = {['@!#'] = 'qbert', [{}] = 1729, [6.28] = 'tau'}
print(u[6.28]) -- пишет "tau" print(u[6.28]) -- пишет "tau"
-- Key matching is basically by value for numbers and strings, but by identity -- Ключ соответствует нужен не только для значения чисел и строк, но и для
-- for tables. -- идентификации таблиц.
a = u['@!#'] -- Теперь a = 'qbert'. a = u['@!#'] -- Теперь a = 'qbert'.
b = u[{}] -- We might expect 1729, but it's nil: b = u[{}] -- Мы ожидали 1729, но получили nil:
-- b = nil since the lookup fails. It fails because the key we used is not the -- b = nil вышла неудача. Потому что за ключ мы использовали
-- same object as the one used to store the original value. So strings & -- не тот же объект, который использовали в оригинальном значении.
-- numbers are more portable keys. -- Поэтому строки и числа больше подходят под ключ.
-- A one-table-param function call needs no parens: -- Вызов фукцнии с одной таблицей в качестве аргумента
-- не нуждается в кавычках:
function h(x) print(x.key1) end function h(x) print(x.key1) end
h{key1 = 'Sonmi~451'} -- Печатает 'Sonmi~451'. h{key1 = 'Sonmi~451'} -- Печатает 'Sonmi~451'.
@@ -187,15 +189,16 @@ end
-- _G - это таблица со всеми глобалями. -- _G - это таблица со всеми глобалями.
print(_G['_G'] == _G) -- Печатает 'true'. print(_G['_G'] == _G) -- Печатает 'true'.
-- Using tables as lists / arrays: -- Использование таблиц как списков / массивов:
-- List literals implicitly set up int keys: -- Список значений с неявно заданными целочисленными ключами:
v = {'value1', 'value2', 1.21, 'gigawatts'} v = {'value1', 'value2', 1.21, 'gigawatts'}
for i = 1, #v do -- #v is the size of v for lists. for i = 1, #v do -- #v это размер списка v.
print(v[i]) -- Indices start at 1 !! SO CRAZY! print(v[i]) -- Начинается с ОДНОГО!
end end
-- A 'list' is not a real type. v is just a table with consecutive integer
-- keys, treated as a list. -- Список это таблица. v Это таблица с последовательными целочисленными
-- ключами, созданными в списке.
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- 3.1 Мета-таблицы и мета-методы. -- 3.1 Мета-таблицы и мета-методы.