最近总听人说lua 是一种小巧而且速度非常快的语言,挺有意思,不要怂就是干。
1.环境安装:
在下用的是win10,所以安装的是从Github上面下载的安装包,传送门:Lua for Windows
嗯,傻瓜式安装,安装好连环境变量都给我配好了,cmd打开,lua -i:
2.语法:
其实说白了就是两种,交互式编程和脚本式编程,交互式就不多说了,打开lua之后一顿输入输出,脚本式编程其实也不难,vsCode新建个hello.lua,里面内容如下:
完事儿cmd 到文件地址,lua hello.lua,效果如下图:
嗯。。。基本上跟python是一个套路啦。
标示符和关键词暂且省略,记住就好,用到再说~(对,lua区分大小写,这个得记住,不过好像大多数语言都区分大小写?2333)
重点:变量默认情况下都是全局变量!!!
3.数据类型
Lua 是 动态类型语言,变量不要类型定义,只需要赋值。
基本类型:nil boolean number string userdata function thread table
嗯哼,nil 是空,boolean 是布尔值,number 和 string 就不说了, userdata 、talble看看:
*userdata 表示任意存储在变量中的C数据结构*
*table Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。*
好吧,表倒是好理解,任意存储在变量中的c数据结构?google 一下:
……google没什么特别的收获,字面意思应该是c语言实现的数据结构?嗯,先放着,看到就懂了。
4.变量
一般默认变量都是全局变量,除非用lcocal 声明成 局部变量,变量的默认值均为nil ;
5.循环
lua的循环有三种,while 循环,for循环 以及 repeat…until 循环(其实repeat until 就相当于js还有其他语言的do while 循环?嗯,试试就知道了)
--hello.lua
print("hello world!")
print("this is lua working!hahaha")
a = 0;
repeat
do
print(a)
a=a+1
end
until(a==9)
输出的结果:
实验证明,跟其他语言中的 do …while 循环的用法是一样的,下一篇。
6.流程控制
Lua 中,判定条件:false 和 nil 为假, true 和 非nil 为真。
注意: Lua 中 0 为 true
话不多说,测试一下:
if(0)
then
print('0 was judged as true')
end
vsCode小tips: 注释/取消注释 快捷键 Ctrl + /
7.函数
Lua 函数主要的两种用途 :
1.完成指定任务
2.计算并返回值
定义格式
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
function_body
return result_params_comma_separated
end
举个栗子:
function sum(num1,num2)
num3 = num1+num2
return num3
end
print (sum(99,1))
tips: 当参数可变的时候,可以用 ...替代,en ...跟c和ts差不多。
8.运算符
算术运算符 : + - * / % ^ 嗯。。。这个都是通用的,略过。
关系运算符 : == 等于; ~= 不等于 ; > 大于 ;< 小于 ; >=大于等于 ; <= 小于等于;
逻辑运算符 : and 与操作符 ; or 或操作符 ; not 非操作符; (对比其他语言 && 、 || 和 !);
其他运算符 : … 连接连个字符串 (类似js的 +) ; # 一元运算符,返回字符串或表的程度(对比ts数组的 length);
试一试:
a = "xxx__"
b = "yyy_"
c = {99,098,999}
print(a..b)
print (#c)
结果是这样的:
9.字符串
Lua 可以用三种方式实现字符串:
1.单引号
2.双引号
3.[[]] (这个是不是应该叫做双重中括号?2333,开玩笑啦,想叫啥就叫啥,开心就好)
然后Lua 有许多方法来支持字符串的操作:
1.string.upper(arg) 、string.lower(arg) 、string.gsub(mainString,findString,replaceString,num) 、string.find (str, substr, [init, [end]])、string.reverse(arg)、string.format(…)、string.len(arg)、string.rep(string, n)、 string.match(str, pattern, init)
嗯。。。顾名思义,在下以为他们的方法名简单易懂,就不赘述了,有兴趣的老铁可以自己google一下~ ~
10.数组
lua的默认索引值是从1开始的 array[0]为nil.
举个栗子:
array = {"lua","myworld"}
for i = 0 ,2 do
print (array[i])
end
--初始化
array = {}
for i = 1 ,3 do
array[i]={}
for j=1 , 3 do
array[i][j]=i*j
end
end
--打印出来
for i = 1 ,3 do
for j = 1 ,3 do
print(array[i][j])
end
end
测试结果:
11.迭代器
Lua 迭代器的三大类:
1.泛型for迭代器
2.无状态迭代器
3.多状态迭代器
嗯…拿最简单的for迭代器来试试手吧:
array = {"google","baidu","bing"}
for key,value in ipairs(array)
do
print (key,value)
end
12.table(表)
table是Lua 种的一种数据结构,其使用关联数组,索引值只要不是nil 都可以。。。(模块,包和对象的问题都是用这个方式来解决的,简单易懂,嗯)
上手试试:
mytable = {}
mytable['ss'] = "ss"
mytable[1] = "lua"
print ("mytable: ",mytable[1],mytable['ss']);
结果是这样的:
table操作:
table.concat (table [, sep [, start [, end]]]): 、 table.insert (table, [pos,] value):、 table.remove (table [, pos])、 table.sort (table [, comp])
嗯哼,简单易懂的操作方法。。。老铁们有疑问就google呗~
13.模块与包
模块:就是创建table,然后返回这个table 调用就好
试试手:
--module.lua
module = {}
module.display = "this is module"
function module.func1()
print('this is the function of module')
end
return module
然后下面是调用:
--hello.lua
require("module")
print(module.display)
module.func1()
输出结果:
至于加载c包嘛。。。嗯,必须先加载且链接,通过动态链接库机制去做,先记下来就好~ ~
好了,老铁们,今天先鼓捣到这里,明天继续~ ~(下集预告,明天从元表开始,嗯哼)
最后,感谢国家,感谢人民,感谢CCTV,感谢老铁们,阿弥陀佛~