lua 光速入门

2024-04-17 23:20
文章标签 入门 lua 光速

本文主要是介绍lua 光速入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

文章目录

  • 安装
  • 注释
  • 字符串
  • 变量
  • 逻辑运算
  • 条件判断
  • 循环
  • 函数
  • Table (表)
  • 常用全局函数
  • 模块化

首先明确 lua 和 js Python一样是动态解释性语言,需要解释器执行。并且不同于 Python 的强类型与 js 的弱类型,它有点居中,倾向于强类型。

安装

  1. 下载解释器,解压缩即可,里面是 exe 可执行文件。

https://www.lua.org/

  1. 本地测试为了方便全局使用。可将执行文件目录添加到环境变量。
  2. 之后即可使用可执行文件名在命令行执行 lua 脚本。

注释

-- 单行注释--[[多行注释
]]

字符串

--双引号间的一串字符
str1 = "Lua"
--单引号间的一串字符
str2 = 'Lua'
--[[和]]--间的一串字符
str3 = [[Lua]]
str4 = [[使用双括号时,甚至能包含换行数据
换行了
最后一行]]
-- 字符串拼接
print('abc'..'def')

变量

-- 全局变量赋值
a = 'ikun'-- 局部变量赋值
local b = 'ikun'

nil表示没有任何有效值,只要是没有声明的值,它就是 nil,类似于 undefined。

逻辑运算

-- 不等于:~=,等于:==
123 ~= 231
-- && || !
and or not

条件判断

if 条件1 then满足条件1
elseif 条件2 then不满足条件1,但是满足条件2
else前面条件全都不满足
end
n = 5
if n < 10 thenprint('n小于10')
end

循环

while 继续循环判断依据 do执行的代码
end
local result = 0
local num = 1while num <= 100 doresult = result + numnum = num + 1
endprint(result)
-- 其中,步长可以省略,默认为1
for 临时变量名=开始值,结束值,步长 do循环的代码
end
local result = 0for i=1,100 doresult = result + i
endprint(result)

函数

function add(a, b)local res = a + bprint(res)return res, "ikun" -- 支持多个返回值,类似于元祖类型
endres, hhh = add(1, 2)
print(res, hhh)

Table (表)

table 是 Lua 中唯一的数据结构,用于表示数组、集合、字典等。类似于 JavaScript 的对象和数组。

t = {"a", "b", 123}
t = {1,3,8,5,4}
print(t[1]) --打印1
print(t[3]) --打印8t[2] = 99 --更改第二个元素的值
print(t[2]) --打印99t[6] = 2 --凭空新建第六个元素并赋值
print(t[6]) --打印2print(t[10])
--因为不存在,打印nil

table 下标从 1 开始。并且在声明 table 时可以自定义下标。

如果全自定义下标的话,其实 table 就是 js 中的对象。

t = {["apple"] = 10,banana = 12,pear = 6,
}
--使用["下标"] = 值
--和  下标 = 值
--都是正确写法
--当第二种方式有歧义时,应该用第一种方式--可以用下面两种方式访问:
print(t["apple"])
--输出10
print(t.apple)
--输出10
--当第二种方式有歧义时,应该用第一种方式

table 的元素没有同类型限制,数字、字符串、函数可以混搭。

如果混搭的话,获取元素,默认从 1 开始的数字下标会跳过自定义了下标的元素进行计数。如下:

t = {666,name = "ikun","hhh", -- 它的下标是 2,不是 3age = 20
}print(t[1], t[2], t[3], t[4])
-- 666     hhh     nil     nilprint(t[1], t.name, t[3], t.age)
-- 666     ikun    nil     20print(t[1], t.name, t[2], t.age)
-- 666     ikun    hhh     20

实际上,在 Lua 中,所有的全局变量全部被存放在了一个大 table 中,这个 table 名为:_G。类似于 js 的 window。

增删 table 元素。

  • table.insert (table, [pos ,] value)
  • table.remove (table [, pos])
local a = {1, 8}             --a[1] = 1,a[2] = 8
table.insert(a, 1, 3)   --在表索引为1处插入3
print(a[1], a[2], a[3])
table.insert(a, 10)    --在表的最后插入10
print(a[1], a[2], a[3], a[4])-->打印的结果:
--3    1    8
--3    1    8    10local a = { 1, 2, 3, 4}
print(table.remove(a, 1)) --删除速索引为1的元素
print(a[1], a[2], a[3], a[4])print(table.remove(a))   --删除最后一个元素
print(a[1], a[2], a[3], a[4])-->打印的结果:
--1
--2    3    4    nil
--4
--2    3    nil    nil

将元素是 string 或者 number 类型的 table,每个元素连接起来变成字符串并返回。

  • table.concat (table [, sep [, i [, j ] ] ])
local a = {1, 3, 5, "hello" }
print(table.concat(a))
print(table.concat(a, "|"))-->打印的结果:
--135hello
--1|3|5|hello

常用全局函数

  1. print(s1, s2, ..., sn):输出所有参数到标准输出,并在参数之间插入空格,最后输出一个换行符。

  2. type(v):返回参数 v 的类型,类型可以是 nil, number, string, boolean, table, function, thread, 或 userdata。

  3. tonumber(e, base):尝试将参数 e 转换为数字。如果 e 是一个数字字符串,那么它可以被转换成对应的数字。可选参数 base 指定了数字的进制(默认为 10)。

  4. tostring(e):将参数 e 转换为字符串。对于数值,它将其转换为数字的字符串表示形式。对于其他值,结果取决于 __tostring 元方法。

  5. require(modname):加载并运行指定模块 modname 的代码。如果模块已经加载,require 会返回之前加载的模块。

  6. loadfile(filename):加载名为 filename 的 Lua 文件,但不执行它。返回一个函数,当调用这个函数时,会执行文件中的代码。

  7. loadstring(str):加载字符串 str 中的 Lua 代码,但不执行它。返回一个函数,当调用这个函数时,会执行字符串中的代码。

模块化

---函数功能:
-- 生成从1-max的table
-- @输入值:table的最大值
-- @返回:  table结果
-- @例子:  local list = getNumberList(10)
local function getNumberList(max)local t = {}for i=1,max dotable.insert(t,i)endreturn t
end--手动返回一个table,包含了上面的函数
return {getNumberList = getNumberList,
}

当调用了require接口后,Lua虚拟机会自动加载你调用的文件,执行文件的内容,然后返回你文件里return的结果。

--引用tools.lua文件,并加载
local tool = require("tools")local list = tool.getNumberList(12)

这篇关于lua 光速入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/913139

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非

MySQL入门到精通

一、创建数据库 CREATE DATABASE 数据库名称; 如果数据库存在,则会提示报错。 二、选择数据库 USE 数据库名称; 三、创建数据表 CREATE TABLE 数据表名称; 四、MySQL数据类型 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串类型 4.1 数值类型 数值类型 类型大小用途INT4Bytes整数值FLOAT4By

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是