Lua data type


Release date:2023-09-27 Update date:2023-10-13 Editor:admin View counts:290

Label:

Lua data type

Lua is a dynamically typed language, variables do not need type definition, only need to assign values to variables. The value can be stored in a variable, passed as a parameter or returned as a result.

There are eight basic types in Lua: nil , boolean , number , string , userdata , function , thread and table .

Data type

Description

nil

This is the simplest, and only the value nil belongs to this class, representing an invalid value (equivalent to false in a conditional expression).

boolean

Contains two values: false and true.

Number

A real floating point number representing a double precision type

string

A string is represented by a pair of double or single quotation marks

function

Functions written by C or Lua

userdata

Represents a C data structure arbitrarily stored in a variable

thread

Represents an independent line for execution, used to execute collaborative programs

table

A table in Lua is actually an “associative array” (associative arrays), and the index of the array can be a number, a string, or a table type. In Lua, table is created through a “construction expression”. The simplest construction expression is {}, which is used to create an empty table.

We can use type function tests the type of a given variable or value:

Example

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

nil

nil type represents a type that does not have any valid value, it has only one value – nil , for example, if you print a variable with no assignment, you will output a nil value:

> print(type(a))
nil
>

For global variables and table, nil also has a “delete” function. Assigning a nil value to a global variable or variable in a table isequivalent to deleting them. Execute the following code to determine:

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

nil should be compared in double quotation marks ":

> type(X)
nil
> type(X)==nil
false
> type(X)=="nil"
true
>

type(X)==nil result is false , type(X) essentially, it is a string returned "nil", which is a string type:

type(type(X))==string

Boolean (Bull)

boolean has only two optional values for the type true (true) and false (fake) , Lua regard false and nil as false , the rest are for true , number 0 and true :

Example

print(type(true))
print(type(false))
print(type(nil))

if false or nil then
    print("At least one is true")
else
    print("Both false and nil are false")
end
if 0 then
    print("The number 0 is true")
else
    print("The number 0 is false")
end

The execution result of the above code is as follows:

$ lua test.lua
boolean
boolean
nil
Both false and nil are false
The number 0 is true

number (digital)

Lua has only one kind by default. number type– double (doubleprecision) type (default type can be modified luaconf.h , the following ways of writing are regarded as number type:

Example

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))

The result of the above code execution:

number
number
number
number
number
number

string

The string is represented by a pair of double or single quotation marks.

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

You can also use 2 square brackets "[[]]" to represent a “piece” string.

Example

html = [[
<html>
<head></head>
<body>
    <a href="http://www.runoob.com/">Novice Tutorial</a>
</body>
</html>
]]
print(html)

The following code execution results are:

<html>
<head></head>
<body>
    <a href="http://www.runoob.com/">Novice Tutorial</a>
</body>
</html>

When performing an arithmetic operation on a numeric string Lua attempts to convert this number string to a number:

> 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 ?
>

The “error” + 1 execution in the above code reported an error, and string concatenation uses the .. , such as:

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

Use # to calculate the length of the string, put it in front of the string, as an example:

Example

> len = "www.runoob.com"
> print(#len)
14
> print(#"www.runoob.com")
14
>

table

In Lua, table is created through a “construction expression”, and the simplest construction expression is {} to create an empty table, you can also add some data to the table to initialize the table directly:

Example

-- Create an empty table
local tbl1 = {}

-- Direct Initial Table
local tbl2 = {"apple", "pear", "orange", "grape"}

The table in Lua is actually an “associative arrays” whose index can be either a number or a string.

Example

-- table_test.lua script file
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

The execution result of the script is:

$ lua table_test.lua
key : value
10 : 33

Arrays that are different from other languages use 0 as the initial index of the array, in the Lua , the default initial index of the inner table usually starts with 1.

Example

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

The execution result of the script is:

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

table will not be fixed in length, when new data is added table , the length will increase automatically, without an initial table are all nil .

Example

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

The execution result of the script is:

$ lua table_test3.lua
val
nil

function

In Lua , a function is regarded as a “First-Class Value” and can be stored in a variable:

Example

-- function_test.lua script file
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))

The execution result of the script is:

$ lua function_test.lua
120
120

function can pass it through parameters as an anonymous function (anonymous function):

Example

-- function_test2.lua script file
function testFun(tab,fun)
        for k ,v in pairs(tab) do
                print(fun(k,v));
        end
end
tab={key1="val1",key2="val2"};
testFun(tab,
function(key,val)--Anonymous function
        return key.."="..val;
end
);

The execution result of the script is:

$ lua function_test2.lua
key1 = val1
key2 = val2

thread

In Lua , the main thread is the collaborative program ( coroutine ). It is associated with threads ( thread pretty much, with its own independent stack, local variables, and instruction pointers, you can share global variables and most other things with other co-programs.

The difference between a thread and a co-program: a thread can run more thanone at the same time, while a co-program can only run one at any time, and only a running co-program is suspended suspend will not be suspended until).

Userdata (Custom Type)

userdata is a user-defined data used to represent a type created by an application or the Cpicket + language library, and data of any data type of any Cpicket + can be transferred (usually struct and pointers) are stored to Lua is called in the variable.

Powered by TorCMS (https://github.com/bukun/TorCMS).