diff options
| -rw-r--r-- | ru-ru/lua-ru.html.markdown | 58 | 
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.  Основные темы, не охваченные стандартной библиотекой: | 
