首页 > 其他分享 >Lua05——Lua基本数据类型

Lua05——Lua基本数据类型

时间:2023-09-17 23:03:20浏览次数:31  
标签:Lua05 变量 索引 -- 数据类型 Lua print local 赋值

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 then
    print("true")
else
    print("false")
end

-- 给变量赋值为 false
local boo = false
if boo then
    print("true")
else
    print("false")
end

输出都为 false

false

false

-- 给变量赋值为0
local boo = 0
if boo then
    print("true")
else
    print("false")
end
-- 给变量赋值为空字符串
local boo = ""
if boo then
    print("true")
else
    print("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 = 3
    local y = 7
    return x + y
end
-- 将函数赋值给变量
local c = foo
print(c())
-- 将函数赋值给变量2
local c = foo()
print(c)

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

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

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

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

2.7 thread

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

线程与协程的区别:

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

2.8 userdata(用户自定义类型)

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

标签:Lua05,变量,索引,--,数据类型,Lua,print,local,赋值
From: https://blog.51cto.com/u_113754/7504143

相关文章

  • day04-数据类型
    1、基本数据类型在我们的之前篇day02-变量中,我们介绍了变量及变量的赋值,我们都知道变量是存储在内存中的值,其实在内存中是会根据变量的数据类型,来分配指定的内存空间,那这变量的数据类型有哪些呢?Python的基本数据类型一般分为6种:Numbers(数值)String(字符串)List(列表)Tuple(元组)......
  • 八大基本数据类型
    publicclassDemo02{publicstaticvoidmain(String[]args){//八大基本数据类型intnum1=10;//最常用bytenum2=20;shortnum3=30;longnum4=30L;//Long类型要在数字后面加L//浮点数(小数)floatnum5=......
  • Matlab : 数据类型与文件读写
    学习一门技术的最佳方式之一是阅读官方文档。MATLAB官方文档提供了关于各种主要数据类型的详细介绍。数值类型(numeric)在MATLAB中,数值类型的变量默认为双精度浮点数(double),但可以使用类型转换将其转换为其他数值类型。以下是MATLAB支持的数值类型:double:双精度浮点数single:单精度......
  • 前端歌谣的刷题之路-第二十二题-基本数据类型检测
    前言我是歌谣歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛客网微信公众号前端小歌谣题目请补全JavaScript函数,要求以字符串的形式返回参数的类型。注意:只需检测基本数据类型。编辑核心代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">......
  • python数据类型
    数据类型整数、浮点、字符串、布尔、列表、元组、字典、集合整数int(integer)字面意思就是整数,定义时不要加引号,否则会变成字符串浮点float理解为小数点,定义时不要加引号,否则会变成字符串字符串在python中加了引号的都会被认为是字符串 ......
  • MySQL中的一些复合数据类型
    ENUM枚举类型ENUM适合于只能在一组固定值中选一个的场景,比如性别只能为男或者女。ENUM的优势在于:只能在固定值中选择,可以在数据库层面限制非法值。数据的存储用数字来存储,占用空间少。但是它的使用有很多需要我们注意的地方,一不小心就会得到错误的结果。createtabletes......
  • 初学者一定要了解的c语言数据类型详解来了
    @TOC前言`一、当我们要描述或者记录一些事物时,通常需要用一些数据来反映它的特征,例如:小明"男""19"岁,身高"1.88"米,在从语言中,要表示这些数据就需要设置合适的数据类型,那么c中数据有哪些类型提供给我使用呢?一、数据类型基本类型整形short//短整型int//整形l......
  • 3-MySQL基本数据类型介绍
    数据类型的介绍:数据类型(data_type)是指系统中所允许的数据的类型。数据库中的每个列都应有适当的数据类型,用于限制或允许该列中存储的数据。例如,列中存储的为数字,则相应的数据类型应该为数值类型。如果使用错误的数据类型可能会严重影响应用程序的功能和性能,所以在设计表时,应该特......
  • Redis7 10大数据类型(Redis集合)
    一、常用二、单值多value,且无重复三、案例SADDkeymember[member...]添加元素SMEMBERSkey遍历集合中的所有元素SISMEMBERkeymember判断元素是否在集合中SREMkeymember[member...]删除元素scard获取集合里面的元素个数SRANDMEMBERkey[数字]从集合中随机展现......
  • OpenCV基本数据类型
    命名规则类{2,3,4,6}{b,s,w,i,f,d}{2,3,4,6}代表向量的长度。{b,s,w,i,f,d}表示向量内数据类型point类可以转化到固定向量类1Point2fpoint(1.0,2.0);2cout<<"first:"<<point.x<<"second:"<<point.y<<endl;size类不可以转化到固......