lua | 数据类型与变量

文章介绍了Lua语言的8种基本数据类型,包括nil、boolean、number、string、table、function、thread和userdata,强调了Lua作为动态类型语言的特性。此外,还详细讨论了变量的概念,特别是全局变量、局部变量以及表的使用,包括表的创建、赋值和操作。最后提到了赋值语句的规则和注意事项。
摘要由CSDN通过智能技术生成

目录

一、数据类型

8个基本类型

1.nil(空)

2.boolean(布尔)

3.number(数字) 

4.string(字符串)

 5.table(表 )

6.function(函数)

7.thread(线程)

8.userdata(自定义类型)

二、变量

全局变量、局部变量与表中的域

赋值语句


 本文章为笔者学习分享

学习网站:Lua 基本语法 | 菜鸟教程

一、数据类型

lua是动态类型语言,变量不需要类型定义,只需要为变量赋值。

8个基本类型

数据类型描述
nil表示一个无效值(条件表达式中相当于false)
boolean包含两个值:false和true
number表示双精度类型的实浮点数
string字符串由一对双引号或单引号来表示
function由C或者lua编写的函数
userdata存储在变量中的C数据结构
thread表示执行的独立路线,用于执行协同程序
tablelua中的table表其实是一个“关联数组”,数组的索引可以是数字、字符串或表类型。在lua里,table的创建是通过“构造表达式“来完成,最简单的构造表达式是{},用来创建一个空表。
print(type("Hello world"))      -- string
print(type(10.4*3))             -- number
print(type(print))              -- function
print(type(type))               -- function
print(type(true))               -- boolean
print(type(nil))                -- nil
print(type(type(X)))            -- string

1.nil(空)

含义:表示一种没有任何有效值,它只有一个值 -- nil,例如打印一个没有赋值的变量,便会输出一个 nil 值。

nil作比较时应该加上双引号”

type(x)=="nil" --返回是“nil”字符串,是一个string类型

2.boolean(布尔)

 boolean类型只有两个值:ture和false

lua把false和nil看作是false,其他都是true,数字0也是true

type(true)=boolean

type(flase)=boolean

type(nil)=nil

3.number(数字) 

lua默认只有一种number类型:double双精度类型 

4.string(字符串)

字符串由一对双引号"或单引号'来表示

可以用2个方括号"[[]]"来表示一块字符串

 在对一个数字字符串上进行算术操作时,lua会尝试将这个数字字符串转成一个数字

字符串的连接使用的是两个..

 

 使用#来计算字符串的长度,放在字符串的前面,如:

 5.table(表 )

创建格式:table的创建是通过“构造表达式”来完成,最简单的构造表达式是{},用来创建一个空表。

通过在表内添加一些数据来初始化表

table不会固定长度大小,有新数据添加时table长度会自动增长,没初始的table都是nil

local tb1={} --空表
local tbl2={"1","2","3"};--初始化创建表

使用:lua的表其实是一个"关联数组",数组的索引可以是数字或字符串

local tb1={} 
tb1["key"]="value"
key=10 --key=10
a[key]=22
a[key]=a[key]+11 --value=33

初始索引:默认从1开始,而不是0

6.function(函数)

在lua中,函数被看作是”第一类值(First-Class Value)“

函数可以存在变量里

function可以以匿名函数(anonymous function)的方式通过参数传递

function A(key,val) 
function(key,val) --匿名函数

7.thread(线程)

  lua内最主要的线程是协同程序(co-routine)。它跟线程差不多,拥有自己的独立栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和塔器大部分东西。

线程与协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。

8.userdata(自定义类型)

userdata是一种用户自定义数据。用于表示一种由应用程序或C/C++语言库所创建的类型,可以将任意C/C++的任意数据类型的数据(通常是(struct和指针)存储在Lua变量中调用。

二、变量

全局变量、局部变量与表中的域

局部变量:使用local关键字定义的变量,未使用local进行显示声明的变量是局部变量。

局部变量的作用域:从声明处开始到所在语句块结束

应该尽可能的使用局部变量,有两个好处:

  • 避免命名冲突
  • 访问局部变量的速度比全局变量更快 

赋值语句

1.可以多个赋值 

格式:变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量

a,b=10,2*x  --a=10;n=2*x

顺序:先计算右边所有的值,然后再执行赋值操作

a=0 --a=0
b=a+1; --(1)a+1=1,(2)b=1

变量个数和值的个数不一致,lua会以变量个数为基础采取以下策略:

  • 变量个数>值个数,按变量个数补足nil
  • <,多余的值会被忽略
a,b,c=0,1  --a=0,b=1,c=nil
a,b=0,1,2  --a=0,b=1
a,b,c=0 --a=0,b=nil,c=nil 这个易错!

多值赋值经常用来交换变量,或将函数调用返回给变量,如下代码。fun()返回的值会一次赋值给变量a、b

a,b=fun()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值