1
0
mirror of https://github.com/adambard/learnxinyminutes-docs.git synced 2025-08-05 22:37:42 +02:00

Another portion of fixes

This commit is contained in:
Daniel-Cortez
2014-11-18 01:54:01 +07:00
parent dd76dc0c49
commit 41633c28aa

View File

@@ -37,20 +37,20 @@ t = nil -- Удаляет определение переменной t; в Lua
-- Блоки обозначаются ключевыми слоавми, такими как do/end: -- Блоки обозначаются ключевыми слоавми, такими как do/end:
while num < 50 do while num < 50 do
num = num + 1 -- Здесь нет ++ или += операторов. num = num + 1 -- Операторов ++ и += нет.
end end
-- Ветвление "если": -- Ветвление "если":
if num > 40 then if num > 40 then
print('больше 40') print('больше 40')
elseif s ~= 'walternate' then -- ~= обозначает "не равно". elseif s ~= 'walternate' then -- ~= обозначает "не равно".
-- Проверка равенства это == как в Python; работает для строк. -- Проверка равенства это ==, как в Python; работает для строк.
io.write('не больше 40\n') -- По умолчанию вывод в stdout. io.write('не больше 40\n') -- По умолчанию вывод в stdout.
else else
-- По умолчанию переменные являются глобальными. -- По умолчанию переменные являются глобальными.
thisIsGlobal = 5 -- Стиль CamelСase является общим. thisIsGlobal = 5 -- Стиль CamelСase является общим.
-- Как сделать локальную переменную: -- Как сделать переменную локальной:
local line = io.read() -- Считывает введённую строку. local line = io.read() -- Считывает введённую строку.
-- Для конкатенации строк используется оператор .. : -- Для конкатенации строк используется оператор .. :
@@ -107,7 +107,8 @@ a2 = adder(36)
print(a1(16)) --> 25 print(a1(16)) --> 25
print(a2(64)) --> 100 print(a2(64)) --> 100
-- Возвраты, вызовы функций и присвоения работают со списками, которые могут иметь разную длину. -- Возвраты, вызовы функций и присвоения работают со списками,
-- которые могут иметь разную длину.
-- Лишние получатели принимают значение nil, а лишние значения игнорируются. -- Лишние получатели принимают значение nil, а лишние значения игнорируются.
x, y, z = 1, 2, 3, 4 x, y, z = 1, 2, 3, 4
@@ -135,10 +136,11 @@ local g; g = function (x) return math.sin(x) end
-- Кстати, тригонометрические функции работают с радианами. -- Кстати, тригонометрические функции работают с радианами.
-- Вызов функции с одним текстовым параметром не требует круглых скобок: -- Вызов функции с одним строковым параметром не требует круглых скобок:
print 'hello' -- Работает без ошибок. print 'hello' -- Работает без ошибок.
-- Вызов функции с одним табличным параметром так же не требуют круглых скобок (про таблицы в след.части): -- Вызов функции с одним табличным параметром так же
-- не требует круглых скобок (про таблицы в след.части):
print {} -- Тоже сработает. print {} -- Тоже сработает.
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@@ -147,8 +149,8 @@ print {} -- Тоже сработает.
-- Таблица = единственная составная структура данных в Lua; -- Таблица = единственная составная структура данных в Lua;
-- представляет собой ассоциативный массив. -- представляет собой ассоциативный массив.
-- Похоже на массивы в PHP или объекты в JS. -- Подобно массивам в PHP или объектам в JS, они представляют собой
-- Также может использоваться, как список. -- хеш-таблицы, которые также можно использовать в качестве списков.
-- Использование словарей: -- Использование словарей:
@@ -170,12 +172,12 @@ print(u[6.28]) -- пишет "tau"
a = u['@!#'] -- Теперь a = 'qbert'. a = u['@!#'] -- Теперь a = 'qbert'.
b = u[{}] -- Вы могли ожидать 1729, но получится nil: b = u[{}] -- Вы могли ожидать 1729, но получится nil:
-- b = nil, т.к. ключ не будет найден. -- b = nil, т.к. ключ не будет найден.
-- Это произойдёт, потому что за ключ мы использовали не тот же самый объект, -- Это произойдёт потому, что за ключ мы использовали не тот же самый объект,
-- который использовали для сохранения оригинального значения. -- который был использован для сохранения оригинального значения.
-- Поэтому строки и числа удобнее использовать в качестве ключей. -- Поэтому строки и числа удобнее использовать в качестве ключей.
-- Вызов функции с одной таблицей в качестве аргумента -- Вызов функции с одной таблицей в качестве аргумента
-- не нуждается в кавычках: -- не требует круглых скобок:
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'.
@@ -190,8 +192,8 @@ print(_G['_G'] == _G) -- Печатает 'true'.
-- Список значений с неявно заданными целочисленными ключами: -- Список значений с неявно заданными целочисленными ключами:
v = {'value1', 'value2', 1.21, 'gigawatts'} v = {'value1', 'value2', 1.21, 'gigawatts'}
for i = 1, #v do -- #v это размер списка v. for i = 1, #v do -- #v - размер списка v.
print(v[i]) -- Нумерация начинается с ОДНОГО !! print(v[i]) -- Нумерация начинается с 1 !!
end end
-- Список не является отдельным типом. v - всего лишь таблица -- Список не является отдельным типом. v - всего лишь таблица
@@ -202,8 +204,8 @@ end
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Таблицу можно связать с метатаблицей, задав ей поведение, как при -- Таблицу можно связать с метатаблицей, задав ей поведение, как при
-- перегрузке операторов. Позже мы увидим, что метатаблицы поддерживают поведение, -- перегрузке операторов. Позже мы увидим, что метатаблицы поддерживают
-- как в js-прототипах. -- поведение, как в js-прототипах.
f1 = {a = 1, b = 2} -- Представляет фракцию a/b. f1 = {a = 1, b = 2} -- Представляет фракцию a/b.
f2 = {a = 2, b = 3} f2 = {a = 2, b = 3}
@@ -223,9 +225,9 @@ setmetatable(f2, metafraction)
s = f1 + f2 -- вызвать __add(f1, f2) на метатаблице от f1 s = f1 + f2 -- вызвать __add(f1, f2) на метатаблице от f1
-- f1, f2 не имеют ключа для своих метатаблиц в отличии от прототипов в js, поэтому -- f1, f2 не имеют ключа для своих метатаблиц в отличии от прототипов в js,
-- нужно получить его через getmetatable(f1). Метатаблица - обычная таблица -- нужно получить его через getmetatable(f1). Метатаблица - обычная таблица
-- с ключами, известными для Lua (например, __add). -- поэтому с ключами, известными для Lua (например, __add).
-- Но следущая строка будет ошибочной т.к в s нет метатаблицы: -- Но следущая строка будет ошибочной т.к в s нет метатаблицы:
-- t = s + s -- t = s + s
@@ -318,12 +320,15 @@ seymour:makeSound() -- 'woof woof woof' -- 4.
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- 1. LoudDog получит методы и переменные класса Dog. -- 1. LoudDog получит методы и переменные класса Dog.
-- 2. В self будет ключ 'sound' из new(), см. пункт 3. -- 2. В self будет ключ 'sound' из new(), см. пункт 3.
-- 3. То же самое, что и "LoudDog.new(LoudDog)", конвертированное в "Dog.new(LoudDog)", -- 3. То же самое, что и "LoudDog.new(LoudDog)", конвертированное
-- поскольку в LoudDog нет ключа 'new', но в его метатаблице есть "__index = Dog". -- в "Dog.new(LoudDog)", поскольку в LoudDog нет ключа 'new',
-- Результат: Метатаблицей для seymour стала LoudDog и "LoudDog.__index = Dog", -- но в его метатаблице есть "__index = Dog".
-- поэтому seymour.key будет равно seymour.key, LoudDog.key, Dog.key, -- Результат: Метатаблицей для seymour стала LoudDog,
-- в зависимости от того какая таблица будет первой с заданным ключом. -- а "LoudDog.__index = Dog". Поэтому seymour.key будет равно
-- 4. 'makeSound' ключ найден в LoudDog; и выглдяит как "LoudDog.makeSound(seymour)". -- seymour.key, LoudDog.key, Dog.key, в зависимости от того,
-- какая таблица будет первой с заданным ключом.
-- 4. Ключ 'makeSound' находится в LoudDog;
-- то же самое, что и "LoudDog.makeSound(seymour)".
-- При необходимости функция new() в подклассе -- При необходимости функция new() в подклассе
-- может быть похожа на аналог в базовом классе. -- может быть похожа на аналог в базовом классе.
@@ -375,8 +380,9 @@ mod.sayHello() -- Выведет "Привет, Hrunkner".
-- Это будет ошибочным; sayMyName доступна только в mod.lua: -- Это будет ошибочным; sayMyName доступна только в mod.lua:
mod.sayMyName() -- ошибка mod.sayMyName() -- ошибка
-- Значения, возвращаемые require, кэшируются, поэтому содержимое файла -- Значения, возвращаемые require, кэшируются,
-- выполняется только 1 раз, даже если он подключается с помощью require много раз. -- поэтому содержимое файла выполняется только 1 раз,
-- даже если он подключается с помощью require много раз.
-- Предположим, mod2.lua содержит "print('Hi!')". -- Предположим, mod2.lua содержит "print('Hi!')".
local a = require('mod2') -- Выведет "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://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://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.
Основные темы, не охваченные стандартной библиотекой: Основные темы, не охваченные стандартной библиотекой: