Типы данных 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 вызов переменной.