lua | 数据类型与变量

这篇具有很好参考价值的文章主要介绍了lua | 数据类型与变量。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、数据类型

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 表示执行的独立路线,用于执行协同程序
table lua中的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 | 数据类型与变量

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

lua | 数据类型与变量

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

 lua | 数据类型与变量

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

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进行显示声明的变量是局部变量。

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

lua | 数据类型与变量

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

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

赋值语句

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文章来源地址https://www.toymoban.com/news/detail-437218.html

a,b=fun()

到了这里,关于lua | 数据类型与变量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Rust变量、常量声明与基本数据类型

    Rust是一门系统级别的编程语言,注重安全性、性能和并发。在这篇博客中,我们将介绍Rust中的变量、常量声明以及基本数据类型,并通过示例说明每一种类型的用法。 在Rust中,使用 let 声明变量。变量默认是不可变的,要使其可变,需要使用 mut 。 常量使用

    2024年01月18日
    浏览(61)
  • go数据类型-空结构体、空接口、nil

    有经验的开发人员都知道,所有的空结构体是指向一个 zerobase的地址,而且大小为0 一般用来作结合map作为set 或者 在channel中 传递信号。 能看到当一个空结构体中,包含了其他类型的变量,就不指向 zerobase。 go中的接口都是隐式的,增加的封装的灵活性,也为阅读源码增加了

    2024年02月05日
    浏览(58)
  • C++ 用户输入与数据类型详解:建立基本计算器及变量类型

    你已经学习了 cout 用于输出(打印)值。现在我们将使用 cin 来获取用户输入。 cin 是一个预定义变量,它使用提取运算符( )从键盘读取数据。 在下面的示例中,用户可以输入一个数字,该数字存储在变量 x 中。然后我们打印 x 的值: 示例 需要注意的是: cout 的发音是

    2024年03月26日
    浏览(38)
  • 【Go基础】编译、变量、常量、基本数据类型、字符串

    面试题文档下链接点击这里免积分下载 go语言入门到精通点击这里免积分下载 使用 go build 1.在项目目录下执行 2.在其他路径下编译 go build ,需要再后面加上项目的路径(项目路径从GOPATH/src后开始写起,编译之后的可执行文件就保存再当前目录) 3.打包的时候自定义名字:

    2024年02月09日
    浏览(58)
  • 第02章_变量与运算符(关键字,标识符,变量,基本数据类型,进制,运算符,字符集)

    定义: 被Java语言赋予了特殊含义,用做专门用途的字符串(或单词) HelloWorld案例中,出现的有 class 、 public 、 static 、 void 等,这些单词已经被Java定义好了。 特点:全部都是 小写字母 。 比较多,不需要死记硬背,学到哪里记到哪里即可。 官方地址:

    2024年01月22日
    浏览(57)
  • 关于Swift中闭包和OC中block对局部变量基本数据类型值的捕获

    翻了很多文章,发现关于Swift闭包关于上下文变量捕获这块,都没有说的很详细,或者Swift2这样的老版本已经不适用了,问了GPT也是和自己实验的结果不一样,记录下来。 首先,回顾一下OC中的block。 block对局部变量基本数据类型的捕获,是在创建时捕获了值,并保存副本在自

    2024年02月16日
    浏览(44)
  • golang interface类型的nil

    golang中interface变量,底层两个对象来存,一个是type、一个是value,只有type、value都为nil时,interface变量才是nil 输出结果为: 可以看到interface 变量i,虽然值为nil,但类型是Student 如果想判断变量value是否为空,可以指定type

    2024年02月14日
    浏览(32)
  • Python(三)变量的6种基本类型

    延续上一章,本章介绍:set(集合)、dictionary(字典) 数据结构 是否可变 是否重复 是否有序 定义符号 列表(list) 可变 可重复 有序 [] 元组(tuple) 不可变 可重复 有序 () 字典(dictionary) 可变 可重复 无序 {key:value} 集合(set) 可变 不可重复 无序 {} 目录 字典 定义 可变

    2024年02月11日
    浏览(35)
  • C++第二章:变量和基本内置类型

    C++定义了一套包括算数类型和空类型在内的基本数据类型。 其中算数类型包含了字符、整形数、布尔值、浮点数。空类型不对应具体的值,仅用于一些特殊的场合,例如最常见的是:当一个函数不返回任何值时使用空类型作为返回类型。 算数类型分为两种:整形(包括字符和

    2024年02月06日
    浏览(42)
  • Lua学习-1 基础数据类型

    nil 表示无效值 boolean 只有 true 和 false number 数值类型可以保存实数,包括整数和浮点数,整数可以是十进制和十六进制,由一串数字序列组成。如果是0x开始,则表示是一个十六进制数。 string 使用单引号或者双引号包含的值即为string function 函数 userData 用户自定义的 数据结构

    2024年02月16日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包