首页 > 其他分享 >Lua入门

Lua入门

时间:2023-04-19 13:33:34浏览次数:34  
标签:arr 入门 -- Lua 数组 print table

Lua语法

初识Lua

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

/i/li/?n=2&i=images/blog/202304/19123201_643f6ec1cce7344523.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

Lua经常嵌入到C语言开发的程序中,例如游戏开发、游戏插件等。

Nginx本身也是C语言开发,因此也允许基于Lua做拓展。

HelloWorld

CentOS7默认已经安装了Lua语言环境,所以可以直接运行Lua代码。

1)在Linux虚拟机的任意目录下,新建一个hello.lua文件

image-20230409085956975

2)添加下面的内容

print("Hello World!")  

3)运行

image-20230409090122017

变量和循环

Lua的数据类型

Lua中支持的常见数据类型包括:

/i/li/?n=2&i=images/blog/202304/19123201_643f6ec1cc5b357553.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

另外,Lua提供了type()函数来判断一个变量的数据类型:

/i/li/?n=2&i=images/blog/202304/19123201_643f6ec1c3d7530155.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

声明变量

Lua声明变量的时候无需指定数据类型,而是用local来声明变量为局部变量:

-- 声明字符串,可以用单引号或双引号,
local str = 'hello'
-- 字符串拼接可以使用 ..
local str2 = 'hello' .. 'world'
-- 声明数字
local num = 21
-- 声明布尔类型
local flag = true

Lua中的table类型既可以作为数组,又可以作为Java中的map来使用。数组就是特殊的table,key是数组角标而已:

-- 声明数组 ,key为角标的 table
local arr = {'java', 'python', 'lua'}
-- 声明table,类似java的map
local map =  {name='Jack', age=21}

Lua中的数组角标是从1开始,访问的时候与Java中类似:

-- 访问数组,lua数组的角标从1开始
print(arr[1])

Lua中的table可以用key来访问:

-- 访问table
print(map['name'])
print(map.name)

循环

对于table,我们可以利用for循环来遍历。不过数组和普通table遍历略有差异。

遍历数组:

-- 声明数组 key为索引的 table
local arr = {'java', 'python', 'lua'}
-- 遍历数组
for index,value in ipairs(arr) do
    print(index, value) 
end

遍历普通table

-- 声明map,也就是table
local map = {name='Jack', age=21}
-- 遍历table
for key,value in pairs(map) do
   print(key, value) 
end

条件控制、函数

Lua中的条件控制和函数声明与Java类似。

函数

定义函数的语法:

function 函数名( argument1, argument2..., argumentn)
    -- 函数体
    return 返回值
end

例如,定义一个函数,用来打印数组:

function printArr(arr)
    for index, value in ipairs(arr) do
        print(value)
    end
end

条件控制

类似Java的条件控制,例如if、else语法:

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

与java不同,布尔表达式中的逻辑运算是基于英文单词:

/i/li/?n=2&i=images/blog/202304/19123201_643f6ec1d261814641.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

案例

需求:自定义一个函数,可以打印table,当参数为nil时,打印错误信息

function printArr(arr)
    if not arr then
        print('数组不能为空!')
    end
    for index, value in ipairs(arr) do
        print(value)
    end
end

标签:arr,入门,--,Lua,数组,print,table
From: https://blog.51cto.com/u_15993581/6206186

相关文章

  • 【web 开发基础】PHP 自定义函数之函数的返回值-PHP 快速入门 (27)
    前言在定义函数时,函数名后面括号中的参数列表是用户在调用函数时用来将数据传递到函数内部的接口,而函数的返回值则将函数执行后的结果返回给调用者。如果函数没有返回值,就只能算一个执行过程。只依靠函数做一些事情还不够,有时更需要在程序脚本中使用函数执行后的结果。由于变量的作......
  • 9.Web开发入门
    Web开发入门课程目标熟悉B/S与C/S体系之间区别熟悉Tomcat服务器熟悉整个Http请求DNS解析过程一、Web开发入门1.1引入之前的程序:java桌面程序,控制台控制,socketgui界面。javase规范现在和以后的程序:javaweb程序。浏览器控制。javaee规范1.2软件的结构C/S(Client-......
  • 【C#新手入门一】winform实现QQ登录窗口
    闲来无事,打算写一系列winform入门相关的小软件,算是对自己技术的一个复习和备忘,也希望能帮助刚入门的萌新(可能也帮不到,因为没有注释)第一期先用winform最大限度的还原QQ的登录界面,下图左侧是仿真的,右侧是QQ的界面,很明显能看出来高仿的和正版的区别,哈哈! 这是效果展示接下来......
  • JavaScript程序与设计入门到入土
    4.JavaScript代码的书写位置和css一样,我们的js也可以有多种方式书写在页面上让其生效js也有多种方式书写,分为行内式,内嵌式,外链式4-1行内式JS代码(不推荐)写在标签上的js代码需要依靠事件(行为)来触发<!--写在a标签的href属性上--><ahref="javascript:alert('我是......
  • AI绘画:Midjourney新手入门指引!
    软件工程师秒变设计师,普通人秒变画家艺术家,这一切正在成为可能!​编辑切换为居中添加图片注释,不超过140字(可选)经过了两天的摸索,终于通过Midjourney搞出来一张比较满意的作品! 特斯拉我已经有了,就差一个定制版钢铁战甲了!“Jarvis,youup?......
  • Node.js入门学习笔记
    NodeJs是js的运行时,意味着可以在浏览器外运行js。可以使用nodejs来构建服务器端应用、CLI应用、WebAPI,甚至用electron构建桌面端应用。使用nvm来管理node版本。在终端输入node进入REPL环境,可以测试和执行代码,mac系统使用control+d退出REPL环境。执行某个js文件:nodexxx.js......
  • C++入门
       本篇文章与大家分享一些c++的关键字、命名空间及输入输出的相关知识。首先,我们先了解一下c++的关键词,具体如下:C++的关键词c++的关键词,共计64个,部分与c语言相似,这些关键字需不需要背呢?答案是否定。回顾我们学c语言的过程,关键词用着用就记住了,没必要刻意去记忆。对于c++的......
  • Docker快速入门 三(dockerfile常用命令,dockerfile构建django项目,docker私有仓库,docker-
    目录Docker一、Dcokerfile常用命令二、Dockerfile构建Django项目三、Docker私有仓库1、简介2、镜像传到官方仓库3、镜像分层4、搭建私有仓库四、Docker-conpose1、Docker-conpose部署项目1、新建flask项目2、编写dockerfile3、编写docker-conpose的yml文件4、启动docker-compoes2......
  • 痞子衡嵌入式:恩智浦经典LPC系列MCU内部Flash IAP驱动入门
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦经典LPC系列MCU内部FlashIAP驱动。LPC系列MCU是恩智浦公司于2003年开始推出的非常具有代表性的产品,距今已经有近20年的生命。按时间线演进来说,其主要分为三代:-元老:基于ARM7/9内核的LPC2000......
  • Java入门6(String和封装类)
    使用第三方jar包,完成get/set操作Lombok,结合特殊的注解,实现setter和getter的自动生成导入jar包使用插件Lombok在类里import即可使用importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;//使用注解@Data,在类编译的时候,自动给class......