lua笔记1 基础概念

基础概念

Lua的变量默认是全局的,如果想要清除,只需要设置为nil。没有赋值的变量也是nil。注意lua是动态语言,变量不需要声明类型,而且自动类型转换。

b = 1
print(b)
b = nil
print(b)
b = "a"
print(b)

输出:

1
nil
a

lua的基本数据类型:

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

详解

lua的number只有双精度浮点型,可以使用科学计数法,比如1.3e109,4e-2

lua的string使用单引号或者双引号括起来,或者[[ ]]标识字符块。对数字的字符串进行算次数运算时,会尝试把string转换到数字,无法转换则报错。

-- a = "4.5" + 1  -- 错误的
print("4.5" + 3)  -- 正确的

lua的string使用..符号标识连接,使用#输出字符串的长度,比如:

x = "aa" .. "bb"
y = #x
print(x, y)

输出:

aabb    4

注意,不同于一般语言,lua对0作为条件,也是true类型

在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。也可以在表里添加一些数据,直接初始化表。table可以是基于下标索引和基于键值索引的。比如:

--- 基于下标索引,类型可以是任意的
tb1 = {"a" , "b", 1.1}

for k, v in pairs(tb1) do 
    print(k .. " : " .. v)
end

输出结果:

1 : a
2 : b
3 : 1.1

注意lua默认从1作为下标。

基于键值的,键值和值可以是任意非nil类型的

tb = {}
tb["fruit"] = "apple"
tb[1] = 3
tb["num"] = 10
tb[2] = "num"

for k, v in pairs(tb) do 
    print("type(k):" .. type(k) .. ", key=" .. k .. ", type(v):" .. type(v) .. ", value=" .. v)
end

如果要删除一个元素,只需要置空即可,比如:tb[2] = nil

Lua中,函数是一个基本的数据类型,函数可以存储在变量中,也可以使用匿名函数作为函数参数,给出代码示例:

-- 实名函数
function fac(n)
    if n == 0 then
        return 1
    else 
        return n * fac(n - 1)
    end
end

print(fac(10))
foo = fac(5)
print(foo)

-- 匿名函数作为参数
function funcArgTest(tab, func)
    for k, v in pairs(tab) do
        print(func(k, v))  -- 匿名函数作为参数
    end
end

tb = {k1 = "apple", k2 = 10}
funcArgTest(tb, function(key, val)
                    return "key=" .. key .. ", value=" .. val
                end
);

代码输出:

3628800
120
key=k1, value=apple
key=k2, value=10

注意lua一切默认的变量都是全局的。上述代码中,funcArgTest内部的kv都是全局的!!!函数内部如果使用变量,一般添加local关键字。

在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。
线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值