Latest web development tutorials

Типы данных Lua

Lua является динамически типизированным языком, переменные, определения типов не нужно только присваивать значения переменным. Значения могут быть сохранены в переменных, передается в качестве параметра или возвращать результаты.

Lua имеет восемь основных типов являются: ноль, логическое значение, число, строка, пользовательские данные, функция, нитки и таблицы.

Типы данных описание
ноль Самое простое, только значение ноль принадлежат к этому классу представляет собой недопустимое значение (эквивалентно ложным в условных выражениях).
логический Она содержит два значения: ложные и истинные.
номер Он представляет собой тип двойной точности с плавающей точкой реального
строка Строка парой двойные или одинарные кавычки, чтобы представить
функция Или с помощью функции C написано в Lua
UserData C представляет собой любую структуру данных, хранящуюся в переменной
нить То, что реализация отдельной линии для реализации совместных программ
таблица Lua таблицы (таблица) на самом деле является "ассоциативный массив" (ассоциативные массивы), индекс массива может быть числом или строкой. В Lua таблица создается с помощью "экспрессирующей конструкции", чтобы завершить простое выражение конструкции {} используется для создания пустой таблицы.

Мы можем использовать функцию типа для проверки тип данной переменной или значения:

print(type("Hello world"))      --> string
print(type(10.4*3))             --> number
print(type(print))              --> function
print(type(type))               --> function
print(type(true))               --> boolean
print(type(nil))                --> nil
print(type(type(X)))            --> string

ноль (пусто)

ноль не имеет какого-либо типа указывает действительное значение, то только одно значение - ноль, такие как печать назначение переменной не произойдет, он будет выводить нулевую ценность:

> print(type(a))
nil
>

Для глобальных переменных и таблицы, ноль и действие "удалить", к глобальной переменной таблицы или таблицы переменной присвоен нулевой значение, эквивалентно, чтобы удалить их, выполните следующий код, чтобы узнать:

tab1 = { key1 = "val1", key2 = "val2", "val3" }
for k, v in pairs(tab1) do
    print(k .. " - " .. v)
end
 
tab1.key1 = nil
for k, v in pairs(tab1) do
    print(k .. " - " .. v)
end

булево (Boolean)

логический тип имеет только два возможных значения: true () и ложь (ложь), Lua к ложным и ноль как "ложь", а другой "истинный":

print(type(true))
print(type(false))
print(type(nil))
 
if false or nil then
    print("至少有一个是 true")
else
    print("false 和 nil 都为 false!")
end

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

$ lua test.lua 
boolean
boolean
nil
false 和 nil 都为 false!

номер (Digital)

Lua по умолчанию только один тип номера - двухместный (двойная точность) Тип (тип по умолчанию может быть изменен в определении luaconf.h), следующая формулировка рассматривается как тип номера:

print(type(2))
print(type(2.2))
print(type(0.2))
print(type(2e+1))
print(type(0.2e-1))
print(type(7.8263692594256e-06))

Запуск экземпляра »

Результаты приведенного выше кода:

number
number
number
number
number
number

строка (строка)

Строка парой двойные или одинарные кавычки для представления.

string1 = "this is string1"
string2 = 'this is string2'

Вы можете также использовать две скобки "[[]]" означает "один" строка.

html = [[
<html>
<head></head>
<body>
    <a href="http://www.w3cschool.cc/">w3cschool本教程</a>
</body>
</html>
]]
print(html)

Следующие результаты выполнения кода:

<html>
<head></head>
<body>
    <a href="http://www.w3cschool.cc/">w3cschool本教程</a>
</body>
</html>

Когда цифровая строка для выполнения арифметических операций, Lua будет пытаться превратить это число в строку цифр:

> print("2" + 6)
8.0
> print("2" + "6")
8.0
> print("2 + 6")
2 + 6
> print("-2e2" * "6")
-1200.0
> print("error" + 1)
stdin:1: attempt to perform arithmetic on a string value
stack traceback:
	stdin:1: in main chunk
	[C]: in ?
> 

Приведенный выше код "ошибка" + 1 ошибка выполнения, конкатенация используя .., такие как:

> print("a" .. 'b')
ab
> print(157 .. 428)
157428
> 

Используйте # для вычисления длины строки, строки на передней панели, можно привести следующие примеры:

> len = "www.w3cschool.cc"
> print(#len)
16
> print(#"www.w3cschool.cc")
16
> 

таблица (таблица)

В Lua таблица создается с помощью "экспрессирующей конструкции", чтобы завершить простое выражение конструкции {} используется для создания пустой таблицы. Вы можете также добавить некоторые данные в таблице, прямой таблицы инициализации:

-- 创建一个空的 table
local tbl1 = {}
 
-- 直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"}

Lua таблицы (таблица) на самом деле является "ассоциативный массив" (ассоциативные массивы), индекс массива может быть числом или строкой.

-- table_test.lua 脚本文件
a = {}
a["key"] = "value"
key = 10
a[key] = 22
a[key] = a[key] + 11
for k, v in pairs(a) do
    print(k .. " : " .. v)
end

Сценарий результатов выполнения:

$ lua table_test.lua 
key : value
10 : 33

В отличие от других языков массива как массив начального индекса 0, начальный индекс по умолчанию в таблице в Lua в целом 1.

-- table_test2.lua 脚本文件
local tbl = {"apple", "pear", "orange", "grape"}
for key, val in pairs(tbl) do
    print("Key", key)
end

Сценарий результатов выполнения:

$ lua table_test2.lua 
Key	1
Key	2
Key	3
Key	4

размер таблицы не является фиксированной длины, есть автоматическое увеличение длины таблицы, чтобы добавить новые данные, исходная таблица не равна нулю.

-- table_test3.lua 脚本文件
a3 = {}
for i = 1, 10 do
    a3[i] = i
end
a3["key"] = "val"
print(a3["key"])
print(a3["none"])

Сценарий результатов выполнения:

$ lua table_test3.lua 
val
nil

Функция (Function)

В Lua, функция считается "значения первого класса (First-Class Value)", может быть переменной функции:

-- function_test.lua 脚本文件
function factorial1(n)
    if n == 0 then
        return 1
    else
        return n * factorial1(n - 1)
    end
end
print(factorial1(5))
factorial2 = factorial1
print(factorial2(5))

Сценарий результатов выполнения:

$ lua function_test.lua 
120
120

Функция может быть анонимной функции (анонимную функцию) путем передачи параметров:

-- function_test2.lua 脚本文件
function anonymous(tab, fun)
    for k, v in pairs(tab) do
        print(fun(k, v))
    end
end
tab = { key1 = "val1", key2 = "val2" }
anonymous(tab, function(key, val)
    return key .. " = " .. val
end)

Сценарий результатов выполнения:

$ lua function_test2.lua 
key1 = val1
key2 = val2

нить (нить)

В Lua, основной поток представляет собой совместную программу (сопрограммная). Именно с резьбой (резьба) почти имеет свой собственный независимый стек, локальные переменные и указатель команд, вы можете поделиться глобальные переменные и большинство других вещей с других совместных программ.

Разница с резьбы сопрограммам: несколько потоков могут работать одновременно, и сопрограммная может работать только один в любое время, и работает сопрограммная только повесить (приостановить) только в режиме паузы.


UserData (пользовательский тип)

UserData это тип данных, определяемый пользователем, используемый приложением указывает на библиотеку или C / C ++ язык, созданный может быть любой C / C ++ данных любого типа данных (как правило, структура и указатели), которые хранятся в Lua вызов переменной.