lua脚本语言学习笔记

这篇具有很好参考价值的文章主要介绍了lua脚本语言学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

因为我们使用redis的时候一般要写lua脚本,这篇文章就介绍一下lua脚本语言的基础用法。

一、安装Lua

window操作系统下可以使用SciTE来执行lua程序,SciTE是一个代码编辑器和集成开发环境,类似IntelliJ IDEA。点击以下链接下载SciTE:

https://github.com/rjpcomputing/luaforwindows/releases

点击上方链接打开页面,点击红框内链接下载SciTE

lua脚本语言学习笔记,lua,学习,笔记

这是github的链接,可能访问很慢或者无法访问,可以通过以下网盘链接下载。

下载Luahttps://pan.baidu.com/s/1lsWURBHR2gmFvD0uL6xplw?pwd=yxzv安装过程很简单,一直下一步就行了,注意在安装过程中勾选创建桌面快捷方式。安装后,桌面多了一个图标

lua脚本语言学习笔记,lua,学习,笔记

鼠标双击这个快捷方式打开SciTE,第一次打开的时候页面是这样的,我们在下面空白的地方输入以下代码

print("Hello world");

lua脚本语言学习笔记,lua,学习,笔记

 然后Ctrl+S保存当前文件,文件名设置成hello.lua,为了方便,把这个文件保存到桌面

lua脚本语言学习笔记,lua,学习,笔记

 保存之后,发现第二排的工具栏图标多了一个运行按钮,点击它就可以运行代码了

lua脚本语言学习笔记,lua,学习,笔记

好了,上面已经介绍了SciTE这款代码编辑器的使用,接下来介绍lua语言的基础语法。

二、lua基础语法

1、代码注释

lua支持单行注释和多行注释

单行注释的写法

--这是注释

多行注释的写法

--[[
这是多行注释
这是多行注释
这是多行注释
--]]

2、标识符

lua语言的标识符命名规则和其他语言类似

  • 变量名以字母或下划线 _ 开头,只能包含字母、数字和下划线。
  • 最好不要使用下划线加大写字母的标示符,因为Lua的保留字就是这样命名的。
  • 一般约定,以下划线开头连接一串大写字母的名字(比如 _VERSION)被保留用于Lua内部的全局变量。

3、关键字

下面是Lua的保留关键字,保留关键字不能作为常量或变量或其他用户自定义标示。

and break do else
elseif end false for
function if in local
nil not or repeat
return then true until
while goto

4、变量的定义

lua中的变量定义不像java要声明类型,只需要写:变量名=变量值;在这一点上,lua和python是一样的。

全局变量:lua中的变量默认是全局的,比如

str = "Hello world";

print(str);

局部变量:使用local关键字修饰的变量,比如

func = function()
    local a = 1;
end;

print(a);

这个时候a是访问不到的,相当于未定义的变量,而我们lua是允许访问未定义的变量的,只是值为nil,类似java的null。

5、变量的赋值

lua中变量的赋值也是用等号,但是lua支持一次给多个变量赋值。

例如,同时给a、b、c赋值

a, b, c = 1, 2, 3;

print(a);
print(b);
print(c);

变量和值的顺序一一对应,这样的话,就有可能变量的个数和值的个数不一致

  • 当变量的个数>值的个数时,没有赋值的对应变量的值默认为nil,这点倒是和java很像
  • 当变量的个数<值的个数时,多余的值会被忽略;

注意:lua的字符串拼接和java不一样,lua使用..来拼接两个字符串。例如:

a = "Hello ";

print(a .. "world");

因为Lua赋值语句会先计算右边所有的值然后再执行赋值操作,所以我们可以这样交换变量的值:

a = 1;
b = 2;

a, b = b, a;

print("a = " .. a);
print("b = " .. b);

 代码运行结果:

lua脚本语言学习笔记,lua,学习,笔记

6、数据类型

lua中有八大数据类型,作为初学者,我们能用上的也就只有:nil、boolean、string、function、table

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

可以通过type()函数来获取变量的类型,例如:

a = 1;
b = "abc";
c = function()
    print("这是函数");
end;
d = true;
e = {name = "Marry", age = 18};

print(type(a));
print(type(b));
print(type(c));
print(type(d));
print(type(e));

以上代码的运行结果:

lua脚本语言学习笔记,lua,学习,笔记

6.1 function的说明
  • 函数和变量一样,可以指定作用域,不指定则默认为全局函数,可以使用local关键字设置为局部函数
  • Lua的函数可以接受可变数目的参数,在函数的参数列表中使用...表示函数有可变的参数。当参数中有固定参数和可变参数时,可变参数要放到最后。
func = function(...)
    for k, v in pairs(...)
	do
        print(v);
    end;
end;

func({"a", "b", "c"});
  • 函数可以返回多个值,每个值以逗号隔开
  • function可以作为函数的参数传递
func = function(a, fun)
    print(q);
    fun();
end;

func(a, function()
    print("函数作为参数传递");
end);
6.2 table的介绍

其他4种数据类型很简单,主要是介绍一下table,这个类似数组,又类似对象的数据类型。

table的写法:{field = value, field2 = value2}

当然,table可以是一个镶嵌的结构,里面的值也可以是一个table

tab = {name = "Tom", age = 18, hobby = {"eat", "drink", "sleep"}}

案例代码: 注意,table的下标是从1开始的

lua脚本语言学习笔记,lua,学习,笔记

 table里面的字段可以通过两种方式获取:

  • 变量名[字段名]
  • 变量名.字段名
tab = {name = "Marry", age = 18};

print(tab["name"]);
print(tab.name);
print(tab["age"]);
print(tab.age);

代码运行结果:

lua脚本语言学习笔记,lua,学习,笔记

 

6.3 table的遍历
tab = {name = "Marry", age = 18};

for k, v in pairs(tab)
do
	print("k = " .. k);
	print("v = " .. v);
end;

7、循环结构

for循环

语法格式

for var = exp1, exp2, exp3
do  
    -- 循环体
end;

变量var从exp1变化到exp2,每次变化以 exp3 为步长递增var,并执行一次循环体。

exp3 是可选的,如果不指定,默认为1。

例如:

-- 打印1到10

for a = 1, 10, 1
do
    print(a);
end;

补充:泛型for循环

泛型for循环通过迭代器函数pairs()或ipairs()来遍历所有值,类似 java 中的 foreach 语句。

Lua 编程语言中泛型 for 循环语法格式:

-- 输出所有水果

fruits = {"apple", "banana", "pineapple", "pear", "watermalon", "plum", "cherry", "kiwi fruit", "strawberry"}

for i, v in ipairs(fruits ) do
    print(i, v)
end;
while循环

语法格式:

while(condition)
do
   statements
end;
do while循环

语法格式:

repeat
   statements
until(condition);

8、分支结构

if...else语句
if(布尔表达式)
then
   --[布尔表达式为true时执行该语句块--]

else
   --[布尔表达式为false时执行该语句块--]

end;
if...else if...else语句
if(布尔表达式1)
then
   --[ 在布尔表达式1为true时执行该语句块--]

elseif(布尔表达式2)
then
   --[ 在布尔表达式2为true时执行该语句块--]

elseif(布尔表达式3)
then
   --[在布尔表达式3为true时执行该语句块--]

else 
   --[如果以上布尔表达式都不为true则执行该语句块--]

end;

9、lua常用函数

print():在控制台输出指定的值,该函数可以有多个参数。

print("Hello ", "world");

string.find():返回匹配串开始和结束的下标,如果不存在匹配串返回nil。

start, finish = string.find("hello world", "hello");

print(start, finish); -- 1 5

select("#", ...):获取可变参数的长度

-- 获取参数个数
function getLength(...)
    return select("#", ...);
end;

print(getLength("a", "b", "c", "d", "e"));

select(n, ...):返回从起点n开始到结束位置的所有参数列表。

print(select(3, "a", "b", "c", "d", "e")); -- c d e

10、算术运算符

lua相对于java多了一个整除运算符

操作符 描述
+ 加法
- 减法
* 乘法
/ 除法
% 取余
^ 乘幂
- 负号
// 整除运算符(>=lua5.3)

11、关系运算符

lua相对于java,不等于的运算符有一点区别文章来源地址https://www.toymoban.com/news/detail-587867.html

  • Java中不等于是!=
  • Lua中的不等于是~=
操作符 描述
== 等于,检测两个值是否相等,相等返回 true,否则返回 false
~= 不等于,检测两个值是否相等,不相等返回 true,否则返回 false
> 大于,如果左边的值大于右边的值,返回 true,否则返回 false
< 小于,如果左边的值大于右边的值,返回 false,否则返回 true
>= 大于等于,如果左边的值大于等于右边的值,返回 true,否则返回 false
<= 小于等于, 如果左边的值小于等于右边的值,返回 true,否则返回 false

12、逻辑运算符

操作符 描述
and 逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B。
or 逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B。
not 逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。

13、其他运算符

操作符 描述
.. 连接两个字符串
# 一元运算符,返回字符串或表的长度。

到了这里,关于lua脚本语言学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言学习笔记——C语言结构

    C语言是一种面向过程的结构化的语言,同时具有高级语言和汇编语言的优点 所有的C语言程序经过编译和连接之后才能被计算机执行 头文件是一种特殊的文件,记录了很多可以直接引用头文件然后使用的函数,也可通过#define声明函数、变量、宏等的定义 头文件通常包含在源

    2024年02月11日
    浏览(32)
  • 【go语言学习笔记】05 Go 语言实战

    在做项目开发的时候,要善于借助已经有的轮子,让自己的开发更有效率,也更容易实现。 1. RESTful API 定义 RESTful API 是一套规范,它可以规范如何对服务器上的资源进行操作。和 RESTful API 和密不可分的是 HTTP Method。 1.1 HTTP Method HTTP Method最常见的就是POST和GET,其实最早在

    2024年02月13日
    浏览(30)
  • Go语言学习笔记

    注:安装教程 注:上一篇笔记 注:下一篇笔记 2.6、流程控制 2.6.1、条件语句 2.6.2、选择语句 2.6.3、循环语句 2.6.4、跳转语句 goto语句跳转到本函数内的某个标签 2.7、函数 2.7.1、函数定义 函数构成代码执行的逻辑结构。函数的基本组成为:func、函数名、参数列表、返回值

    2024年02月06日
    浏览(33)
  • 6.Go语言学习笔记-结合chatGPT辅助学习Go语言底层原理

    1、Go版本 2、汇编基础 推荐阅读:GO汇编语言简介 推荐阅读:A Quick Guide to Go\\\'s Assembler - The Go Programming Language 精简指令集 数据传输: MOV/LEA 跳转指令: CMP/TEST/JMP/JCC 栈指令: PUSH/POP 函数调用指令: CALL/RET 算术指令: ADD/SUB/MUL/DIV 逻辑指令: AND/OR/XOR/NOT 移位指令: SHL/SHR JCC有条件跳转: JE

    2024年02月04日
    浏览(30)
  • Go语言学习笔记(二)

    以下是一些推荐的Go语言学习资源的链接: Go语言教程:https://golang.org/doc/ Go by Example:Go by Example Golang Tutorials:https://golangtutorials.com/ Go语言第一课(慕课网):PHP模糊查询技术案例视频教程-慕课网 Go语言进阶教程(实验楼):极客企业版 Go语言高级编程(GitBook):谁是凶手

    2024年01月20日
    浏览(34)
  • C语言学习笔记<1>

    1. EOF(End of File)是文件结束标志,用于表示文件已经读取完毕。在C语言中,可以通过判断是否读取到EOF来判断文件是否读取完毕。 以下是一个简单的C语言代码示例,用于读取一个文本文件并输出其内容: 2.单步执行 #include Windows.h 是C/C++中引入Windows API头文件的语句,它包

    2024年04月22日
    浏览(25)
  • go语言学习笔记1

    ​ GoLang是一种静态强类型、编译型、并发型,并具有 垃圾回收 功能的编程语言;它可以在不损失应用程序性能的情况下极大的降低代码的复杂性,还可以发挥多核处理器同步多工的优点,并可解决面向对象程序设计的麻烦,并帮助程序设计师处理琐碎但重要的内存管理问题

    2024年02月12日
    浏览(34)
  • C语言学习笔记:数组

    ✨博文作者:烟雨孤舟 💖 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介:作为大数据爱好者,以下是个人总结的学习笔记,如有错误,请多多指教! 目录 ​​​​​​​ 简介 数组声明 数组初始化 访问数组元素 多维数组 二维数组

    2024年02月09日
    浏览(42)
  • Go语言学习笔记(三)

    教程:文档 - Go 编程语言 (studygolang.com) 在call-module-code需要注意,需要在hello目录下操作 这是一个在Go项目的模块管理中的命令。在Go的模块管理工具( go mod )中,这个命令用于修改模块依赖关系。 具体来说, go mod edit -replace example.com/greetings=../greetings  这个命令的作用是:

    2024年02月02日
    浏览(33)
  • C语言学习笔记---C语言分支与循环语句

    前言: 什么是语句? C语言可分为以下五类: 表达式语句 函数调用语句 控制语句 复合语句 空语句 语句 :C语言中,由分号隔开的句子就是一条语句 如: C语言中用 非零 表示 真 ,用 零 表示 假 ,即: 逻辑真,逻辑假 三大语法结构 :顺序结构、分支(选择)结构、循环结构

    2024年02月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包