当前位置: 首页 > news >正文

Lua05——Lua基本数据类型

lua 是动态类型语言,变量使用前不需要定义类型,在使用时直接赋值即可。

1 基本数据类型

值可以存储在变量中,作为参数传递或作为结果返回。

lua中有八个基本数据类型:

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

2 获取数据类型

通过函数 type 可以返回一个值或一个变量所属的数据类型。

print(type("hello"))
print(type(23))
print(type(23.3))
print(type(true))
print(type(nil))
print(type(function()  end))

输出如下

string

number

number

boolean

nil

function

整数和浮点数在lua中,都属于 number 实数类型。

2.1 nil

nil 是一种空数据类型,在 lua 中将 nil 用于表示“无效值”。变量在首次赋值前的默认值,就是 nil,将 nil 赋给全局变量后,即等同于删除该变量。

-- 定义变量,但是没有赋值
local abc
print(abc)
print(type(abc))-- 为变量赋值
abc = "hello"
print(abc)
print(type(abc))

输出如下:

nil

nil

hello

string

在赋值前该变量及变量类型都为nil,赋值后变量及变量类型随之改变。

2.2 boolean

布尔类型,取值只有 true 和 false。

lua 中,当变量为 nil 或 false 时,其布尔值为 false,其他数值均为 true。

-- 变量未赋值时,值为nil
local boo
if boo thenprint("true")
elseprint("false")
end-- 给变量赋值为 false
local boo = false
if boo thenprint("true")
elseprint("false")
end

输出都为 false

false

false

-- 给变量赋值为0
local boo = 0
if boo thenprint("true")
elseprint("false")
end
-- 给变量赋值为空字符串
local boo = ""
if boo thenprint("true")
elseprint("false")
end

当变量值为非nil 及 false 时,取值都为 true。

true

true

2.3 number

lua 中没有区分整数和小数,所有数字统一为number类型,即实数。

number的计算方法主要来自于 math 类

-- 向上取整
print(math.ceil("3.1415926"))
-- 向下取整
print(math.floor("3.1415926"))
-- 绝对值
print(math.abs(-3.1415926))

输出如下

4

3

3.1415926

2.4 string

在 lua 中字符串表示有三种方式:

  • 双引号
  • 单引号
  • [[]]包裹
local s1 = "hello\nworld"
local s2 = 'hello\nworld'
local s3 = [[hello\nworld]]print(s1)
print(s2)
print(s3)

其中在单引号、双引号定义的字符串,如果存在转义符时,会对其转义输出;

而由 [[]] 包裹的字符串,不会对转义字符进行转义,仅将其原样输出。

hello

world

hello

world

hello\nworld

字符串的内化:如果有多个完全一样的字符串,在lua中仅会保存一份。

2.5 table

  • 数组, 索引从1开始
  • 数组索引可以是任意类型,但必须是唯一的,类似于java中的map的key,或者python中的dict的key
  • 数组元素可以是任意类型,也可以是数组
  • 数组的长度是固定的,不能动态改变
  • 数组可以嵌套
local ta = {name = "ticktok",age = 23,sex = true,honor = {"swim","run","sleep"},001002003, -- 索引没有,相当于[1]7759521, -- 索引没有,相当于[2][1] = "hello", -- 索引重复,该值不会被保存["key"] = "value",[1.2] = "world",
}

定义一个 table 类型的数据,前边是索引,后边是索引对应的数据。

需要注意的是:

  • 如果没有设置索引时,该数据对应的索引默认从[1]开始,lua 数组中索引的下标从1开始

local ta = {001002003, -- 索引没有,相当于[1]7759521, -- 索引没有,相当于[2]
}
print(ta[1])

输出如下

1002003

  • 索引不能重复,当显示设置的索引重复时,新数据会覆盖老数据
local ta = {[1.2] = "world",[1.2] = "world23",
}
print(ta[1.2])

输出如下

world23

  • 当隐式索引数据与显示索引重复时,无论顺序怎样变化,该索引始终显示为隐式索引定义的数据
local ta = {[1] = "hello", -- 索引重复,该值不会被保存001002003, -- 索引没有,相当于[1]7759521, -- 索引没有,相当于[2]
}
print(ta[1])

输出如下

1002003

  • 当数组中包含了table数据,仍然可以根据索引,引用或输出该数据
local ta = {honor = {"swim","run","sleep"},
}
print(ta.honor[1])

输出如下,数据的索引从1开始

swim

  • 当引用的索引不存在时,输出为 nil
print(ta["abc"])

输出 

nil

2.6 function

lua 中函数也可以作为变量使用。

-- 定义一个函数
local function foo()local x = 3local y = 7return x + y
end
-- 将函数赋值给变量
local c = foo
print(c())
-- 将函数赋值给变量2
local c = foo()
print(c)

将函数赋值给变量时,函数名后不带()和带有()在引用变量时会有区别:

  • 赋值时不带(),在使用变量时就需要在变量名后补充()
  • 赋值时带有(),在使用变量时就不需要在变量名后再补充()

函数也可以如下使用,将赋值和定义放在一起。

local c2 = function()local x = 3local y = 7return x * y
end
print(c2())

2.7 thread

在 lua 里,最主要的线程是协同程序(corourtine),与线程(thread)类似,拥有独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量等信息。

线程与协程的区别:

  • 线程可以同时多个运行,协程在任意时刻只能运行一个,且处于运行状态的协程只有被挂起时,才会暂停。

2.8 userdata(用户自定义类型)

一种由用户自定义的数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意C/C++ 的任意数据类型的数据存储到 lua 变量中调用。

相关文章:

Lua05——Lua基本数据类型

lua 是动态类型语言,变量使用前不需要定义类型,在使用时直接赋值即可。 1 基本数据类型 值可以存储在变量中,作为参数传递或作为结果返回。 lua中有八个基本数据类型: nil 只有值nil属于该类,表示一个无效值&#…...

一文3000字从0到1使用pytest-xdist实现分布式APP自动化测试

目录 01、分布式测试的原理 02、测试项目 03、环境准备 04、搭建步骤 05、分布式执行 06、测试报告 不知道大家有没有遇到这样一种情况,实际工作中,app自动化测试的用例可能是成百上千条的,如果放在一台机器上跑,消耗的时间…...

pyqt5:pandas 读取 Excel文件或 .etx 电子表格文件,并显示

pip install pandas ; pip install pyqt5; pip install pyqt5-tools; 编写 pyqt5_read_etx.py 如下 # -*- coding: utf-8 -*- """ pandas 读取 Excel文件或 .etx 电子表格文件,显示在 QTableWidget 中 """ import os import sys…...

【QT】Windows 编译并使用 QT 5.12.7源码

1、下载 QT 源码 QT5.12.7源码下载地址: download | QT 5.12.7 选择任意一种下载即可,适用于 Windows 和 Linux 环境 ​ 这里选择下载 .zip 文件。 2、安装依赖 (1) 安装 perl perl 安装包下载地址: download | perl for windows 根据当前系统选择对应版本。…...

php实战案例记录(15)获取GET和POST请求参数

在PHP中,可以使用$_GET和$_POST超全局变量来获取GET和POST请求参数。 获取GET请求参数: 要获取GET请求参数,可以使用$_GET超全局变量。它是一个关联数组,其中键是参数的名称,值是参数的值。例如,如果URL是…...

k8s-9 ingress-nginx 特性

TLS加密 创建证书 测试 auth认证 创建认证文件 rewrite重定向 进入域名 会自动重定向hostname.html 示例二: 测试 后面必须跟westos 这个关键字 canary金丝雀发布 基于header灰度 场景:版本的升级迭代,比如一个service 升级到另…...

java案例24:模拟百度翻译

思路: 编写一个程序模拟百度翻译 用户输入英文之后,搜索程序中对应的中文, 如果搜索到1对应的中文,就输出搜索结果,反之给出提示 要求使用Map集合实现英文与中文的存储。1.百度翻译主要用于翻译对应的意思&#xff0c…...

汽车烟雾测漏仪(EP120)

【汽车烟雾测漏仪(EP120)】 此烟雾测漏仪专为车辆管道(油道、气道、冷却管道) 的泄露检测而设计。适用于所有轻型 汽车、摩托车、轻卡、游艇等。 【特点】 具有空气模式和烟雾模式。空气模式,无需烟雾,检测…...

【轻松玩转MacOS】安全隐私篇

引言 这一篇将介绍如何保护MacOS的安全,包括如何设置密码,使用防火墙,备份数据等重要环节,避免因不慎操作或恶意攻击带来的安全风险,让你的MacOS之旅更安心、更放心。 一、设置密码:保护你的MacOS的第一道…...

4.02 用户中心-上传头像功能开发

详细内容请看下面地址: 地址:http://www.gxcode.top/code...

在Ubuntu 18.04安装Docker

安装需要的包 $ sudo apt-get update 安装 apt 依赖包,用于通过HTTPS来获取仓库 $ sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common添加 Docker 的官方 GPG 密钥 $ curl -fsSL https://download.do…...

Vue-2.1scoped样式冲突

默认情况&#xff1a;写在组件中的样式会全局生效->因此很容易造成多个组件之间的样式冲突问题 1.全局样式&#xff1a;默认组件中的样式会作用到全局 2.局部样式&#xff1a;可以给组件加上scoped属性&#xff0c;可以让样式只作用于当前组件 <style scoped> <…...

Matlab之查询子字符串在字符串中的起始位置函数strfind

一、功能 strfind函数用于在一个字符串中查找指定的子字符串&#xff0c;并返回子字符串在字符串中的起始位置。 二、语法 indices strfind(str, pattern) 其中&#xff0c;str是要进行查找的字符串&#xff0c;pattern是要查找的子字符串。 函数会返回一个由子字符串在字…...

[游戏开发][Unity]安卓出包报错记录

打包报错日志有以下几种类型&#xff1a; 报错&#xff1a; CommandInvokationFailure: Android Asset Packaging Tool failed. E:\Android-SDK-Tool\build-tools\33.0.2\aapt.exe package -v -f -F raw.ap_ -A raw -0 "" --ignore-assets "!.svn:!.git:!.ds_st…...

在两个有序数组中找整体第k小的数

一、题目 给定两个已经排序的数组&#xff08;假设按照升序排列&#xff09;&#xff0c;然后找出第K小的数。比如数组A {1&#xff0c; 8&#xff0c; 10&#xff0c; 20}&#xff0c; B {5&#xff0c; 9&#xff0c; 22&#xff0c; 110}&#xff0c; 第 3 小的数是 8.。…...

Linux 指令心法(十)`head` 显示文本文件的开头部分

文章目录 命令的概述和用途命令的用法命令行选项和参数的详细说明命令的示例命令的注意事项或提示 命令的概述和用途 head 是一个用于显示文本文件的开头部分的命令。它在 Linux 和 Unix 系统中非常有用&#xff0c;因为它允许用户查看文件的前几行&#xff0c;以便快速预览文…...

前端——Layui的导航栏与tab页联动

一、body <!-- 导航栏 --><div class"layui-side layui-bg-black"><div class"layui-side-scroll"><ul id"nav" class"layui-nav layui-nav-tree" lay-filter"stock"><li class"layui-n…...

一致性哈希算法

普通取模算法 假设我们有三台缓存服务器&#xff0c;用于缓存图片&#xff0c;我们为这三台缓存服务器编号为 0号、1号、2号&#xff0c;现在有3万张图片需要缓存&#xff0c;我们希望这些图片被均匀的缓存到这3台服务器上&#xff0c;以便它们能够分摊缓存的压力。也就是说&a…...

深度学习基础之参数量(3)

一般的CNN网络的参数量估计代码 class ResidualBlock(nn.Module):def __init__(self, in_planes, planes, norm_fngroup, stride1):super(ResidualBlock, self).__init__()print(in_planes, planes, norm_fn, stride)self.conv1 nn.Conv2d(in_planes, planes, kernel_size3, …...

红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线

红队专题 招募六边形战士队员1.课前回顾unicode编码 字符串 2.界面编程(下)对话框重载消息函数更改对话框同步更改 3.服务端上线&#xff0c;下线&#xff0c;以及客户端的资源销毁(上)添加socket 变量添加 socket 消息填补config信息创建线程函数 并运行添加Addhost添加 getIt…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...