[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Computer Craft & Open Computers » Общий » Lua. Работа со строками
Lua. Работа со строками
Aleksey2093Дата: Среда, 18.03.2015, 17:41 | Сообщение # 1
Подполковник
Группа: Администраторы
Сообщений: 116
Репутация: 0
Статус: Offline
Под строкам, как и обычно, подразумевают последовательность символов. Lua является полностью 8-битным, соответственно строки могут содержать символы с любым числовым значением, включая встроенные нули (?!!!). Это значит, что вы можете хранить любые двоичные данные в строках. Строки в Lua содержат неизменяемые значения. Вы не можете изменить символ в строке, как это делали в С; вместо этого, вы создаете новую строку с желаемыми изменениями, как показано в следующем примере:

a = "one string"
b = string.gsub(a, "one", "another") -- изменение части строки
print(a) --> one string
print(b) --> another string
Как и другие объекты Lua, строки являются субъектами автоматического управления памятью. Это значит. что вам не нужно беспокоиться о выделении памяти для строк и последующим ее освобождении; Lua сделает это за вас. Строка может содержать одну букву, а может - целую книгу. Lua достаточно эффективно работает с длинными строками. Программы на Lua, работающие со строками размером 100K или 1M символов - достаточно обычное явление.

Строки в Lua могут ограничиваться как двойными, так и одинарными кавычками:

a = "a line"
b = 'another line'
Использование определенного вида кавычек (одинарных или двойных) является лишь вопросом стиля и ваших личных привычек и предпочтений, за исключением использования кавычек внутри строки; в этом случае кавычки должны либо иметь закрывающую пару, либо предваряться обратным слэшем.

Следующие примеры иллюстрируют вышесказанное:

> print("one line\nnext line\n\"in quotes\", 'in quotes'")
one line
next line
"in quotes", 'in quotes'
> print('a backslash inside quotes: \'\\\'')
a backslash inside quotes: '\'
> print("a simpler way: '\\'")
a simpler way: '\'
Также можно задавать символ в строке его числовым значением, используя escape-последовательность \ddd, где ddd - последовательность не более трех десятичных цифр. В качестве примера - строки "alo\n123\"" и '\97lo\10\04923"' абсолютно равнозначны, т.к. в системе, использующей ASCII: 97 - ASCII-код английской буквы a, 10 - код перевода строки, а 49 (\049 в примере) - код цифры 1.

Также строки можно выделять парными сдвоенными квадратными скобками [[...]]. Строки, выделенные таким образом могут начинаться в любом месте и могут быть вложенными в другие строки, т.к. двойные квадратные скобки не интерпретируются как управляющая последовательность. Более того, в таких строках игнорируется первый символ, если это символ перевода строки. Такая форма особенно удобна для написания строк, содержащих участки кода; например, write(page)
Lua осуществляет автоматическое преобразование между строками и числами во время выполнения. В случае применения числовых операций к строкам, Lua пытается преобразовать строку в число:

print("10" + 1)           --> 11
print("10 + 1")           --> 10 + 1
print("-5.3e-10"*"2")     --> -1.06e-09
print("hello" + 1)        -- ERROR (cannot convert "hello")
Lua применяет такое приведение не только в арифметических операциях, но и в других местах, где ожидается число. И обратно, если число встречается там, где ожидается строка, Lua преобразует число в строку:
print(10 .. 20)        --> 1020
(Конкатенация строк в Lua осуществляется оператором ... В случае помещения оператора после числа, необходимо разделять их пробелом; в противном случае, Lua воспринимает первую точку как десятичную).
Если не принимать в расчет описанное автоматическое преобразование, строки и числа являются совершенно разными вещами. Сравнение типа 10 == "10" всегда будет возвращать false (Ложь), т.к. 10 - число, а "10" - строка. Если необходимо явно преобразовать строку в число, используется функция tonumber, возвращающая nil в случае невозможности преобразования:

line = io.read()     -- чтение строки
n = tonumber(line)   -- попытка преобразования в число
if n == nil then
error(line .. " is not a valid number")
else
print(n*2)
end
Для преобразования числа в строку применяется функция tostring или конкатенация числа с пустой строкой:

print(tostring(10) == "10")   --> true
print(10 .. "" == "10")       --> true
Подобные преобразования всегда истинны.
 
Форум » Computer Craft & Open Computers » Общий » Lua. Работа со строками
  • Страница 1 из 1
  • 1
Поиск: