lua 学习笔记

lua学习笔记(入门篇·上)

  • 最近总听人说lua 是一种小巧而且速度非常快的语言,挺有意思,不要怂就是干。
    1.环境安装:
    在下用的是win10,所以安装的是从Github上面下载的安装包,传送门:Lua for Windows
    lua 学习笔记_第1张图片
    嗯,傻瓜式安装,安装好连环境变量都给我配好了,cmd打开,lua -i:
    lua 学习笔记_第2张图片
    2.语法:
    其实说白了就是两种,交互式编程和脚本式编程,交互式就不多说了,打开lua之后一顿输入输出,脚本式编程其实也不难,vsCode新建个hello.lua,里面内容如下:
    lua 学习笔记_第3张图片
    完事儿cmd 到文件地址,lua hello.lua,效果如下图:
    lua 学习笔记_第4张图片
    嗯。。。基本上跟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)

输出的结果:
lua 学习笔记_第5张图片
实验证明,跟其他语言中的 do …while 循环的用法是一样的,下一篇。

6.流程控制
Lua 中,判定条件:false 和 nil 为假, true 和 非nil 为真。

	注意: Lua 中 0 为  true

话不多说,测试一下:

	if(0)
	then
	    print('0 was judged as true')
	end

测试结果:
lua 学习笔记_第6张图片

	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))

测试结果:
lua 学习笔记_第7张图片

	tips:  当参数可变的时候,可以用 ...替代,en ...跟c和ts差不多。

8.运算符
算术运算符 : + - * / % ^ 嗯。。。这个都是通用的,略过。
关系运算符 : == 等于; ~= 不等于 ; > 大于 ;< 小于 ; >=大于等于 ; <= 小于等于;
逻辑运算符 : and 与操作符 ; or 或操作符 ; not 非操作符; (对比其他语言 && 、 || 和 !);
其他运算符 : … 连接连个字符串 (类似js的 +) ; # 一元运算符,返回字符串或表的程度(对比ts数组的 length);

试一试:

	a = "xxx__"
	b = "yyy_"
	c = {99,098,999}
	print(a..b)
	print (#c)

结果是这样的:
lua 学习笔记_第8张图片
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

测试结果:
lua 学习笔记_第9张图片
嗯,再看看多维数组:

--初始化
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

测试结果:
lua 学习笔记_第10张图片
11.迭代器
Lua 迭代器的三大类:
1.泛型for迭代器
2.无状态迭代器
3.多状态迭代器

嗯…拿最简单的for迭代器来试试手吧:

array = {"google","baidu","bing"}

for key,value in ipairs(array)
do
    print (key,value)
end

测试结果:
lua 学习笔记_第11张图片
嗯哼,所以,其实就是遍历~ ~

12.table(表)
table是Lua 种的一种数据结构,其使用关联数组,索引值只要不是nil 都可以。。。(模块,包和对象的问题都是用这个方式来解决的,简单易懂,嗯)

上手试试:

mytable = {}

mytable['ss'] = "ss"

mytable[1] = "lua"

print ("mytable: ",mytable[1],mytable['ss']);

结果是这样的:
table测试结果
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,感谢老铁们,阿弥陀佛~

你可能感兴趣的:(语言相关)