summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ru-ru/lua-ru.html.markdown58
1 files changed, 32 insertions, 26 deletions
diff --git a/ru-ru/lua-ru.html.markdown b/ru-ru/lua-ru.html.markdown
index b9af61b4..89d0c8d7 100644
--- a/ru-ru/lua-ru.html.markdown
+++ b/ru-ru/lua-ru.html.markdown
@@ -37,20 +37,20 @@ t = nil -- Удаляет определение переменной t; в Lua
-- Блоки обозначаются ключевыми слоавми, такими как do/end:
while num < 50 do
- num = num + 1 -- Здесь нет ++ или += операторов.
+ num = num + 1 -- Операторов ++ и += нет.
end
-- Ветвление "если":
if num > 40 then
print('больше 40')
elseif s ~= 'walternate' then -- ~= обозначает "не равно".
- -- Проверка равенства это == как в Python; работает для строк.
+ -- Проверка равенства это ==, как в Python; работает для строк.
io.write('не больше 40\n') -- По умолчанию вывод в stdout.
else
-- По умолчанию переменные являются глобальными.
thisIsGlobal = 5 -- Стиль CamelСase является общим.
- -- Как сделать локальную переменную:
+ -- Как сделать переменную локальной:
local line = io.read() -- Считывает введённую строку.
-- Для конкатенации строк используется оператор .. :
@@ -107,7 +107,8 @@ a2 = adder(36)
print(a1(16)) --> 25
print(a2(64)) --> 100
--- Возвраты, вызовы функций и присвоения работают со списками, которые могут иметь разную длину.
+-- Возвраты, вызовы функций и присвоения работают со списками,
+-- которые могут иметь разную длину.
-- Лишние получатели принимают значение nil, а лишние значения игнорируются.
x, y, z = 1, 2, 3, 4
@@ -135,10 +136,11 @@ local g; g = function (x) return math.sin(x) end
-- Кстати, тригонометрические функции работают с радианами.
--- Вызов функции с одним текстовым параметром не требует круглых скобок:
+-- Вызов функции с одним строковым параметром не требует круглых скобок:
print 'hello' -- Работает без ошибок.
--- Вызов функции с одним табличным параметром так же не требуют круглых скобок (про таблицы в след.части):
+-- Вызов функции с одним табличным параметром так же
+-- не требует круглых скобок (про таблицы в след.части):
print {} -- Тоже сработает.
--------------------------------------------------------------------------------
@@ -147,8 +149,8 @@ print {} -- Тоже сработает.
-- Таблица = единственная составная структура данных в Lua;
-- представляет собой ассоциативный массив.
--- Похоже на массивы в PHP или объекты в JS.
--- Также может использоваться, как список.
+-- Подобно массивам в PHP или объектам в JS, они представляют собой
+-- хеш-таблицы, которые также можно использовать в качестве списков.
-- Использование словарей:
@@ -170,12 +172,12 @@ print(u[6.28]) -- пишет "tau"
a = u['@!#'] -- Теперь a = 'qbert'.
b = u[{}] -- Вы могли ожидать 1729, но получится nil:
-- b = nil, т.к. ключ не будет найден.
--- Это произойдёт, потому что за ключ мы использовали не тот же самый объект,
--- который использовали для сохранения оригинального значения.
+-- Это произойдёт потому, что за ключ мы использовали не тот же самый объект,
+-- который был использован для сохранения оригинального значения.
-- Поэтому строки и числа удобнее использовать в качестве ключей.
-- Вызов функции с одной таблицей в качестве аргумента
--- не нуждается в кавычках:
+-- не требует круглых скобок:
function h(x) print(x.key1) end
h{key1 = 'Sonmi~451'} -- Печатает 'Sonmi~451'.
@@ -190,8 +192,8 @@ print(_G['_G'] == _G) -- Печатает 'true'.
-- Список значений с неявно заданными целочисленными ключами:
v = {'value1', 'value2', 1.21, 'gigawatts'}
-for i = 1, #v do -- #v это размер списка v.
- print(v[i]) -- Нумерация начинается с ОДНОГО !!
+for i = 1, #v do -- #v - размер списка v.
+ print(v[i]) -- Нумерация начинается с 1 !!
end
-- Список не является отдельным типом. v - всего лишь таблица
@@ -202,8 +204,8 @@ end
--------------------------------------------------------------------------------
-- Таблицу можно связать с метатаблицей, задав ей поведение, как при
--- перегрузке операторов. Позже мы увидим, что метатаблицы поддерживают поведение,
--- как в js-прототипах.
+-- перегрузке операторов. Позже мы увидим, что метатаблицы поддерживают
+-- поведение, как в js-прототипах.
f1 = {a = 1, b = 2} -- Представляет фракцию a/b.
f2 = {a = 2, b = 3}
@@ -223,9 +225,9 @@ setmetatable(f2, metafraction)
s = f1 + f2 -- вызвать __add(f1, f2) на метатаблице от f1
--- f1, f2 не имеют ключа для своих метатаблиц в отличии от прототипов в js, поэтому
+-- f1, f2 не имеют ключа для своих метатаблиц в отличии от прототипов в js,
-- нужно получить его через getmetatable(f1). Метатаблица - обычная таблица
--- с ключами, известными для Lua (например, __add).
+-- поэтому с ключами, известными для Lua (например, __add).
-- Но следущая строка будет ошибочной т.к в s нет метатаблицы:
-- t = s + s
@@ -318,12 +320,15 @@ seymour:makeSound() -- 'woof woof woof' -- 4.
--------------------------------------------------------------------------------
-- 1. LoudDog получит методы и переменные класса Dog.
-- 2. В self будет ключ 'sound' из new(), см. пункт 3.
--- 3. То же самое, что и "LoudDog.new(LoudDog)", конвертированное в "Dog.new(LoudDog)",
--- поскольку в LoudDog нет ключа 'new', но в его метатаблице есть "__index = Dog".
--- Результат: Метатаблицей для seymour стала LoudDog и "LoudDog.__index = Dog",
--- поэтому seymour.key будет равно seymour.key, LoudDog.key, Dog.key,
--- в зависимости от того какая таблица будет первой с заданным ключом.
--- 4. 'makeSound' ключ найден в LoudDog; и выглдяит как "LoudDog.makeSound(seymour)".
+-- 3. То же самое, что и "LoudDog.new(LoudDog)", конвертированное
+-- в "Dog.new(LoudDog)", поскольку в LoudDog нет ключа 'new',
+-- но в его метатаблице есть "__index = Dog".
+-- Результат: Метатаблицей для seymour стала LoudDog,
+-- а "LoudDog.__index = Dog". Поэтому seymour.key будет равно
+-- seymour.key, LoudDog.key, Dog.key, в зависимости от того,
+-- какая таблица будет первой с заданным ключом.
+-- 4. Ключ 'makeSound' находится в LoudDog;
+-- то же самое, что и "LoudDog.makeSound(seymour)".
-- При необходимости функция new() в подклассе
-- может быть похожа на аналог в базовом классе.
@@ -375,8 +380,9 @@ mod.sayHello() -- Выведет "Привет, Hrunkner".
-- Это будет ошибочным; sayMyName доступна только в mod.lua:
mod.sayMyName() -- ошибка
--- Значения, возвращаемые require, кэшируются, поэтому содержимое файла
--- выполняется только 1 раз, даже если он подключается с помощью require много раз.
+-- Значения, возвращаемые require, кэшируются,
+-- поэтому содержимое файла выполняется только 1 раз,
+-- даже если он подключается с помощью require много раз.
-- Предположим, mod2.lua содержит "print('Hi!')".
local a = require('mod2') -- Выведет "Hi!"
@@ -403,7 +409,7 @@ g() -- Напишет 343.
Я начинал с <a href="http://nova-fusion.com/2012/08/27/lua-for-programmers-part-1/">BlackBulletIV's Lua for programmers</a>.
Затем я прочитал официальную <a href="http://www.lua.org/pil/contents.html">Документацию по Lua</a>.
-Так же может быть полезным <a href="http://lua-users.org/files/wiki_insecure/users/thomasl/luarefv51.pdf">Краткая справка по Lua</a> на lua-users.org.
+Также может быть полезной <a href="http://lua-users.org/files/wiki_insecure/users/thomasl/luarefv51.pdf">Краткая справка по Lua</a> на lua-users.org.
Основные темы, не охваченные стандартной библиотекой: