Lua学习之类型与值

2024-03-08 22:48
文章标签 类型 学习 lua 与值

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

Lua是一种动态语言,在语言中没有类型定义的语法。

 

在lua中有8中基本的类型:

1.nil(空)

2.boolean

3.number(数字)

4.string(字符串)

5.userdata(自定义类型)

6.function(函数)

7.thread(线程)

8.table(表)

函数type可根据一个值返回类型的名称。

print(type("Hello world")) ------------->string

由于变量是没有预定义类型的,所以

a = 10;print(type(a)); --------------------->number

a = print;        ------------------------>注意这个是合法的print(type(a)); ----------------------->function

这里我们重点来看下string类型

Lua的字符串是不可变的值,如果修改只能创建一个新的字符串:

a = "one";
b = string.gsub(a,"one","two");
print(a);-------------->one
print(b);-------------->two

Lua的字符串和其他Lua对象一样,都是采用自动内存管理机制所管理的对象。

另外还可以用一对匹配的双方括号来界定一个字母字符串,这样就可以延伸多行,但Lua不会解释其中的转义字符。

如:

page = [[
<html>
<head>
</head>
</html>
]]
write(page);

Lua提供了运行时数字和字符串自动转换。

print("20"+1); ------------------>21
print("Hello"+2);---------------->错误

相反,Lua也可以将字符串转换成一个数字

print(10 .. 20);------------------>1020

在Lua中 .. 表示字符串连接操作符。

 

接着我们来看看table类型

a = {};------------------->创建一个table,并引用到变量a中

for i=1,1000 do a[i] = i * 2 end;

print(a[9];) -------------------->18

print(a["x"]);-------------------->nil

 

我们还可以将a["x"]写成a.x,但是注意a.x与a["x"]的区别。

 

 

长度操作符“#”用于返回一个数组或者线性表的最后一个索引,我们可以用他来干很多有意义的事情

遍历table:

for i=1,#a do

  print(a[i]);

end

删除最后一个元素:

a[#a] = nil;

 

末尾添加元素:

a[#a+1] = v;

 

当一个数组中间有空隙也就是说有元素是nil,那么#就认为这个空元素是数组结束的标志。

 

如果真的需要处理那些有空隙的数组,那么就需要用到函数table.maxn,它将放回数组的最大索引的元素。

 

a = {};

a[10000]  = 1;

print(table.maxn(a)); ---------------->10000

 

接下来我们来看下Lua里面的function函数

lua语言中的函数可以存储在变量中,可以通过参数来传递给其他函数,好可以作为其他函数的返回值。

 

Lua既可以调用自身的函数,也可以调用c语言的函数。

 

userdata和thread

 

userdata用于表示一种由应用程序或者c语言库所创建的新类型。

 

转载于:https://www.cnblogs.com/CaomaoUnity3d/p/4609084.html

这篇关于Lua学习之类型与值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现

Python如何查看数据的类型

《Python如何查看数据的类型》:本文主要介绍Python如何查看数据的类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python查看数据的类型1. 使用 type()2. 使用 isinstance()3. 检查对象的 __class__ 属性4.

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Python如何在Word中生成多种不同类型的图表

《Python如何在Word中生成多种不同类型的图表》Word文档中插入图表不仅能直观呈现数据,还能提升文档的可读性和专业性,本文将介绍如何使用Python在Word文档中创建和自定义各种图表,需要的... 目录在Word中创建柱形图在Word中创建条形图在Word中创建折线图在Word中创建饼图在Word

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在

Rust中的BoxT之堆上的数据与递归类型详解

《Rust中的BoxT之堆上的数据与递归类型详解》本文介绍了Rust中的BoxT类型,包括其在堆与栈之间的内存分配,性能优势,以及如何利用BoxT来实现递归类型和处理大小未知类型,通过BoxT,Rus... 目录1. Box<T> 的基础知识1.1 堆与栈的分工1.2 性能优势2.1 递归类型的问题2.2

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操