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:
@@ -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.
|
||||||
|
|
||||||
Основные темы, не охваченные стандартной библиотекой:
|
Основные темы, не охваченные стандартной библиотекой:
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user