Добавлен , опубликован

Руководство по Lua 5.1

Содержание:

Кавычки

Для определения строк используются "двойные кавычки", 'одинарные кавычки'
и [[двойные квадратные скобки]]
    > = "hello"
    hello
    > = 'hello'
    hello
    > = [[hello]]
    hello
Зачем же так много способов? Ну можно, к примеру, вложить одни кавычки в другие и т.д.
    > = 'hello "Lua user"'
    hello "Lua user"
    > = "Its [[content]] hasn't got a substring."
    Its [[content]] hasn't got a substring.
    > = [[Let's have more "strings" please.]]
    Let's have more "strings" please.
Двойные квадратные скобки тоже имеют свои особенности. О них будет написано ниже.

Управляющие последовательности

Строки, заключённые в кавычки, могут интерпретировать C-подобные управляющие последовательности (escape-последовательности), начинающиеся с символа "\" (обратный слэш):
  • \b (пробел)
  • \n (переход на новую строку)
  • \r (возврат каретки)
  • \t (горизонтальная табуляция)
  • \v (вертикальная табуляция)
  • \\ (обратный слеш)
  • \'' (двойная кавычка)
  • \' (одинарная кавычка)
    > = "hello \"Lua user\""
    hello "Lua user"
    > = 'hello\nNew line\tTab'
    hello
    New line        Tab
Управляющие последовательности не распознаются, когда используются двойные квадратные скобки:
    > = [[hello\nNew line\tTab]]

    hello\nNew line\tTab

Многострочный текст

Двойные квадратные скобки используются для определения текста на нескольких строках:
    > = [[Multiple lines of text
    >> can be enclosed in double square
    >> brackets.]]
    Multiple lines of text
    can be enclosed in double square
    brackets.

Вложенные кавычки

В двойные квадратные скобки можно вкладывать другие, но в этом случае необходимо вписать один или несколько знаков = после первой и перед последними квадратными скобками. Не важно сколько знаков равенства вы напишите, главное, что их кол-во совпадало:
    > = [[one [[two]] one]]        -- не пойдёт
    stdin:1: nesting of [[...]] is deprecated near '['
    > = [=[one [[two]] one]=]      -- а так пойдёт
    one [[two]] one
    > = [===[one [[two]] one]===]  -- и так пойдёт
    one [[two]] one
    > = [=[one [ [==[ one]=]       -- всё в порядке, не обращаем внимание на"внутренности"
    one [ [==[ one

Соединение

Строки можно соединять вместе, используя оператор .. (две точки)
    > = "hello" .. " Lua user"
    hello Lua user
    > who = "Lua user"
    > = "hello "..who
    hello Lua user
Можно соединять строки с числами. В этом случае числа будут приведены к строковому типу:
    > = "Green bottles: "..10
    Green bottles: 10
    > = type("Green bottles: "..10)
    string
Использование большого числа соединений может работать медленно, т.к. при соединении выделяется память под новую строку. Парочка примеров:
    -- медленный вариант
    local s = ''
    for i=1,10000 do s = s .. math.random() .. ',' end
    io.stdout:write(s)

    -- быстрый вариант
    for i=1,10000 do io.stdout:write(tostring(math.random()), ',') end

    -- тоже быстро, но требует больше памяти
    local t = {}
    for i=1,10000 do t[i] = tostring(math.random()) end
    io.stdout:write(table.concat(t,','), ',') 
Также в Lua есть стандартная строковая библиотека.
Парочка примеров:
    > = string.byte("ABCDE", 2) -- возвращает ASCII значение второго символа
    66
    > = string.char(65,66,67,68,69) -- возвращает строку по ASCII значению
    ABCDE
    > = string.find("hello Lua user", "Lua") -- ищет подстроку "Lua"
    7       9
    > = string.find("hello Lua user", "l+") -- ищет один или несколько стоящих рядом "l"
    3       4
    > = string.format("%.7f", math.pi) --формат числа
    3.1415927
    > = string.format("%8s", "Lua") -- формат строки
         Lua

Приведение типов данных

Lua автоматически выполняет приведение чисел к строкам и наоборот, там где это нужно.
    > = "This is Lua version " .. 5.1 .. " we are using."
    This is Lua version 5.1 we are using.
    > = "Pi = " .. math.pi
    Pi = 3.1415926535898
    > = "Pi = " .. 3.1415927
    Pi = 3.1415927
Как видно выше при приведение типов нельзя контролировать формат строки. Это можно исправить, воспользовавшись функцией string.format()
    > = string.format("%.3f", 5.1)
    5.100
    > = "Lua version " .. string.format("%.1f", 5.1)
    Lua version 5.1
данная статья является вольным переводом с сайта lua-users.org
с возможными дополнениями и изменениями