Lua_基本数据类型(3)

码云代码链接
https://gitee.com/wenwenc9/lua_pro.git




共 8 种数据类型

数据类型描述
nil这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)
boolean包含两个值:false和true。
number表示双精度类型的实浮点数
string字符串由一对双引号或单引号来表示
function由 C 或 Lua 编写的函数
userdata表示任意存储在变量中的C数据结构
thread表示执行的独立线路,用于执行协同程序
tableLua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

type函数测试给定变量或者值的类型

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

1、nil 空

打印一个没有赋值的变量名,输出为空

> print(type(a))
nil
>

1.1 删除作用

tab1 = {
    key1 = 'vail',
    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

1.2 nil 比较

比较的时候,应该加上双引号

b = nil
print(type(b)==nil) -- false
print(type(b)=='nil') -- true

2、boolean

只有true和false

rint(type(true))
print(type(false))
print(type(nil))
if false or nill then
    print("错误")
else
    print('正确')
end

3、number 数字

lua默认数据类型就是number
double 双精度 (默认类型可以修改 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))

4、字符串

4.1 字符串的表示

字符串由一对双引号或单引号来表示

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

也可以用 2 个方括号 “[[]]” 来表示"一块"字符串

html = [[
<html>
<head></head>
<body>
    <a href="//www.w3cschool.cn/">w3cschoolW3Cschool教程</a>
</body>
</html>
]]
print(html)

4.2 字符串运算

print("6" + 1)  -- 7
print("6" + "6") -- 12
print("a" + 2) -- 错误的

4.3 字符串拼接

print("a" .. "b")
print(157 .. 428)

4.4 计算字符串长度

a = 'www.baidu.com'
print(#a) -- 13

5、table 表

在lua语言中,创建table需要“构建表达式”来完成,最简单的构建表示式是 {}
Lua 中的表(table)其实是一个"关联数组"(associative arrays)
数组的索引可以是数字或者是字符串

创建一个空表

tab1 ={}

初始化表

tab2 = {'apple','pear','orange','grape'}

5.1 表的键值与索引

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

key:value 10:33

5.2 索引

lua初始索引从1开始,(python 从 0)

tab1 = {'apple','orange','pear','grape'}
for k,v in pairs(tab1) do
    print(k .. ':' .. v)
end

1:apple
2:orange
3:pear
4:grape

5.3 表的长度

table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil

a3 = {}
for i = 1, 10 do
    a3[i] = i
end
a3["key"] = "val"
print(a3["key"]) -- val
print(a3["none"]) -- nil
print(a3['1']) -- nil
print(a3[1]) -- 1

6、function 函数

函数是第一类值(和其他变量相同)意味着函数可以存储在变量中,可以作为函数
的参数,也可以作为函数的返回值。

这个特性给了语言很大的灵活性:一个程序可以重新定义函数增加新的功能或者为了避免运行不可靠代码创建安全运行环境而隐藏函数,此外这特性在 Lua 实现面向对象中也起了重要作用。

Lua 可以调用 lua 或者 C 实现的函数,Lua 所有标准库都是用 C 实现的。
标准库包括

  • string 库
  • table 库
  • I/O 库
  • OS 库
  • 算术库
  • debug 库

6.1 变量存储函数

function f(n)
    if n == 0 then
        return 1
    else
        return n * f(n-1)
    end
end
print(f(1)) -- 1 
a = f
print(a(1)) -- 1

6.2 匿名函数 anonymous function

function a(tab, fun)
    for k, v in pairs(tab) do
        print(fun(k, v))
    end
end
tab = { key1 = "val1", key2 = "val2" }
a(tab, function(key, val)
    return key .. " = " .. val
end)


key1 = val1
key2 = val2

7、thread 线程

在 Lua 里,最主要的线程是协同程序(coroutine)。
它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。

8、userdata 自定义类型

userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值