Lua 教程1
总结Lua基础语法,与简单运用 这里并不涉及深入内容
推荐一个快速学习LUA的网站 ,这个网站的内容写的短有些细节忽略了。有时间最好还是要看下面推荐的书
推荐书籍 Programming in Lua third edition.pdf
总结一点学习编程语言的技巧
学习一个新的语言难免会涉及到大量的内置限定词。这时候就需要使用一个合适的开发工具(重要),智能提示可以帮助我们快速输入和记忆这些重要且不好记忆的文法。
类比之前的语言 总是可以找到大量的特性的,这时候就免去的重复的记忆
关于lua语言一些难搞的概念
这个可以放到最后看
HelloWorld
我在桌面新建了一个 a.lua 脚本 , 第一行代码是让这个脚本去寻找解释器
1 | #!/usr/local/bin/lua |
因为权限问题 我先给脚本授权,然后直接调用了这个脚本
1 | keyle@keyles-MacBook-Pro ~/Desktop chmod a+x /Users/keyle/Desktop/a.lua |
保留关键字
1 | and break do else |
基础数据类型
nil、boolean、number、string、userdata、function、thread和table
检测类型
最后一个输出结果 type(nil) 之后 得到了一个 string。
1 | print(type("Hello world")) --> string |
nil的特性
使用nil 可以删除table里面的key-value
1 | tab1 = { key1 = "val1", key2 = "val2", "val3" } |
key1 - val1
已经被删除了。在table里如果默认没有声明 key ,则默认从1开始自增
1 | 1 - val3 |
boolean
boolean 类型只有两个可选值:true(真) 和 false(假),Lua 把 false 和 nil 看作是”假”,其他的都为”真”
在其他语言也是如此
number
Lua 默认只有一种 number 类型 – double(双精度)类型(默认类型可以修改 luaconf.h 里的定义)
string
字符串由一对双引号或单引号来表示。也可以用 2 个方括号 “[[]]” 来表示”一块”字符串。
在lua里使用#
来计算字符串长度。
1 | print(#"123") |
table
- Lua 中的表(table)其实是一个”关联数组”(associative arrays),数组的索引可以是数字或者是字符串。
- 在 Lua 里表的默认初始索引一般以 1 开始。
- table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil。输出结果:
1
2
3
4
5
6
7
8
9-- 创建一个空的 table
local tbl1 = {}
-- 直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"}
for i,v in ipairs(tbl2) do
print(i,v)
end1
2
3
4
5⚙ keyle@keyles-MacBook-Pro ~/Desktop ./a.lua
1 apple
2 pear
3 orange
4 grape
table计数截断
1 | local tb = {[1] = "1",[2] = "2",[20] = "20"} |
注意看上面dictionary表中索引如果中断,是无法正确获取table长度的。
解决办法:用keyValue paire去做累计计数,获取正确的长度。
table的remove会返回自身
1 | tb1 = {3,3,2,1} |
function
- 支持作为变量传递
- 支持以匿名的方式使用
- 支持多个返回值
多个返回值
支持多个返回值,比如string.find,其返回匹配串”开始和结束的下标”(如果不存在匹配串返回nil)。
举个例子:返回字符串的开始|结束下表
1 | s, e = string.find("just test for you", "test") |
1 | 6 9 |
可变参数
lua支持不固定参数的传入
1 | func1 = function(...) |
thread
lua使用的是协程(coroutine) 与 unity3d的机制几乎一样。 这个也好理解。
userdata
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。ulua就是通过扩展userdata来实现调用unity3d的各种属性。
变量作用域
- Lua 变量有三种类型:全局变量、局部变量、表中的域。
- Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。
- 局部变量的作用域为从声明位置开始到所在语句块结束。
- 变量的默认值均为 nil。
尽可能使用局部变量,因为访问速度快1
2
3
4
5
6do
local a = 123
print(a)
end
--超出了作用域 print -> nil
print(a)
赋值
简单形象的赋值方式,第二第三两行是交换两个变量的值。免去写交换算法了
1 | a, b = 10, 2 * x --> a=10; b=2*x |
左右两边要对称,如果不对称参看下文
1 | 当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略: |
这里直接使用 [table].key 的方式取出了 “321”
1 | a = {3,2,1,9} |
控制台输出 :
1 | 321 |
循环
其他的方式类似 for while所有一样都一样,下面这个do while循环这里取个例子
1 | repeat |
输出1 – 10
1 | i = 1 |
符号
- 不允许类似 a ++ , a/=1 之类的写法
- 不允许类似c#里的&&(and)符号,这里需要用 and
- 使用 .. 连接字符串 ..
#
用来计算字符或者table长度- ~=这是个不等于符
本文标题:Lua 教程1
文章作者:Keyle
发布时间:2017-03-22
最后更新:2024-08-20
原始链接:https://vrast.cn/posts/32bf7061/
版权声明:©Keyle's Blog. 本站采用署名-非商业性使用-相同方式共享 4.0 国际进行许可