openresty开发系列13--lua基础语法2常用数据类型介绍

时间:2021-08-02 00:42:00

openresty开发系列13--lua基础语法2常用数据类型介绍

一)boolean(布尔)
布尔类型,可选值 true/false;

Lua 中 nil 和 false 为"假",其它所有值均为"真"。比如 0 和空字符串就是"真";

local a = true
local b = 0
local c = nil

if a then
    print("a")        -->output:a
else
    print("not a")    --这个没有执行
end

if b then
    print("b")        -->output:b
else
    print("not b")    --这个没有执行
end

if c then
    print("c")        --这个没有执行
else
    print("not c")    -->output:not c
end

二)number(数字)
Number 类型用于表示实数,和 C/C++ 里面的 double 类型很类似。可以使用数学函数 math.floor(向下取整)和 math.ceil(向上取整)进行取整操作。

local count = 10
local order = 3.99
local score = 98.01
print(math.floor(order))   -->output:3
print(math.ceil(score))    -->output:99

三)string(字符串)
Lua 中有三种方式表示字符串:
1、使用一对匹配的单引号。例:'hello'。
2、使用一对匹配的双引号。例:"abclua"。

local str1 = 'hello world'
local str2 = "hello lua"

print(str1)    -->output:hello world
print(str2)    -->output:hello lua

转义字符
string =  hello\',\"\",\\n,\\t

3、字符串还可以用一种长括号(即[[ ]])括起来的方式定义。整个词法分析过程将不受分行限制,不处理任何转义符。
     在 Lua 实现中,Lua 字符串一般都会经历一个"内化"(intern)的过程,即两个完全一样的 Lua 字符串在 Lua 虚拟机中只会存储一份。每一个 Lua 字符串在创建时都会插入到 Lua 虚拟机内部的一个全局的哈希表中。
     另外,Lua 的字符串是不可改变的值,不能像在 c 语言中那样直接修改字符串的某个字符,而是根据修改要求来创建一个新的字符串。Lua 也不能通过下标来访问字符串的某个字符。

它支持一些转义字 符,列表如下
\a  响铃  
\b  退格 (back space)  
\f  提供表格(form feed)  
\n  换行(newline)  
\r  回车(carriage return)  
\t  水平tab(horizontal tab)  
\v  垂直tab(vertical tab)  
\\  反斜杠(backslash)  
\"  双引号(double quote)  
\'  单引号(single quote)

定义:"add\name",'hello' 字符串

local str3 = [["add\name",'hello']]
print(str3)    -->output:"add\name",'hello'

4、字符串连接使用的是 ..
> print("a" .. 'b')
ab

5、字符串与number类型转换
print(tonumber("10") == 10)
print(tostring(10) == "10")

6、使用 # 来计算字符串的长度,放在字符串前面
print(#"this is string")

注意:string不可修改

local a= "this is a";
a = "this is new a ";
local b= "this is new a ";

1)在 Lua 实现中,Lua 字符串一般都会经历一个"内化"(intern)的过程,即两个完全一样的 Lua 字符串在 Lua 虚拟机中只会存储一份。每一个 Lua 字符串在创建时都会插入到 Lua 虚拟机内部的一个全局的哈希表中。

2)Lua 的字符串是不可改变的值,不能像在c语言中那样直接修改字符串的某个字符,而是根据修改要求来创建一个新的字符串。Lua 也不能通过下标来访问字符串的某个字符。
Lua的字符串和其它对象都是自动内存管理机制所管理的对象,不需要担心字符串的内存分配和释放

提供了效率,安全

s='123456789';
s1 = s;
s='abcdwff';

print(s);
print(s1);
--------------------
s='123456789'

local s1 = string.sub(s, 2, 5)
print(s)