Lua是一个动态类型的语言,没有类型定义,每个值都有自己的类型。
Lua有8个基本类型,nil, boolean, number, string, userdata, function, thread, table,利用type函数可以打印出一个给定值的类型。
注意最后一行,无论x为什么值,结果一定是string,因为type函数的结果总是一个string。
变量没有预定义的类型,任何变量可以有任何类型的值
注意最后两行,函数也是可以用来赋值的,你可以像对待其他的变量一样来把函数当成一个变量。
通常情况下,如果你把一个变量用来包含不同类型的值,会使代码看起来很混乱。但是,有时有效地利用这个特性,会有意想不到的效果。例如使用nil来对函数的返回值就行判断,来区分一个正常的返回值还是一个异常条件。
1 Nil
Nil类型只有一个值,nil,跟其他任何值都不同。如我们之前看到的,在一个全局变量未被赋值之前,它的值为nil,你也可以通过将一个全局变量赋值为nil来删除它。Lua用nil作为一个无值类型,表示一个变量不再起作用。
2 Booleans
Boolean类型含有两个值,true和false。但是Lua中可以表示条件的变量不仅仅boolean类型,任何值都可以表示条件。Lua认为false和nil为"假",其他任何值都是"真"。注意,跟其他语言不同的是,Lua认为0和空字符串为"真"。
3 Numbers
Number类型代表实数(在计算机中占两个地址的浮点数)。Lua没有整型,并且也不需要。有个普遍的误解,使用浮点型会有算术错误,一些人害怕浮点型即使一个简单的“加”运算也会有奇奇怪怪的问题。但事实上,用一个double类型来表示一个integer,不存在任何边界问题(除非这个数大于1.0e14)。Lua可以表示任何的32-bit的整数,不存在任何边界问题。除此之外,大多数cpu处理浮点数会比整数要快。
不过,Lua为了编译方便,也使用了其他的number类型,例如long和单浮点数。这是为了兼容一些不支持double类型的设备。
以下这些numeric常量都是合法的
4
0.4
4.57e-3
0.3e12
5e+20
4 Strings
String在Lua中与其他编程语言没有什么不同,都是表示一串字符。但是Lua可以在字符串中含有任何字符,包括0.
String在Lua中不可被更改,是常量。你不能更改一个字符串中的某一个字符,但是可以创建一个新的string。例如
Lua的string是自动管理内存的,其他的lua对象(例如table, function,etc)也一样。这意味着你不必担心string的内存分配与释放,让Lua为你处理这些问题就好了。一个string可以包含一个字符,也可以包含一整本书,Lua可以有效地处理长string,处理100k-1M的字符串,对Lua来说是小菜一碟。
4.1 Lua string的划界
上面说了,Lua的string可以包含任何字符,甚至0(在C中,0是被认为是string的结尾的)。因此Lua对字符串边界的判定,不能用0,而是匹配单引号'或者双引号" :
但是在编程的时候,为了风格统一,最后是只用其中一种,除非string本身含有引号。或者在字符串中用转义字符。Lua的string可以使用以下C风格的转义字符:
\a bell
\b back space
\f form feed
\n newline
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\" double quote
\' single quote
示例如下:
我们可以在string中用一个字符的ASCII值来表示它,格式为\ddd,这里ddd最多包含3个数字字符,例如:
97表示"a", 10表示new line,49表示数字"1",注意\049没有写成\49的原因是,后面跟的字符是数字,若写成\49,那么会被认为是\492,这就不是我们想要的了。
对string划界,除了匹配引号之外,我们可以像处理长注释一样,匹配两个“[[”“]]”。使用这种划界方式的string通常会有几行,如果第一个字符是“换行符”,则会被忽略掉,并且不会解释转义字符(如下示例),保持原样输出。通常在string中包含代码片段的时候使用比较方便。
这个时候,有个疑问,如果我的string中含有“[[”或者“]]”,怎么办。Lua提供了一个更方便的解决办法,就是使用类似[====[这样的匹配符号,“=”个数任意,但是保证前后相同,如果“=”个数不同,那么就会被忽略掉。
这种方式也可以用在长注释中,这里就不演示了。
4.2 Lua中string与number的相互转换
Lua提供了string和number的运行时自动转换。任何对string进行的算术操作,都会尝试将string转换为number。例如:
除了算术操作,其他任何期待一个number的地方,如果传入string,都是尝试将string转换为number。相反,在一个期待string的地方,如果传入number,那么也会尝试将number转换为string。
“..”是Lua中的字符串连接符,在10之后要有一个空格“ ”,否则第一个“.”会被看作是小数点。
现在看来,在Lua的设计中,支持这些自动转换是不是一个good idea,都没有一个定论。但是,不要太指望它们。它们在少数场合用起来很方便,但是会增加语言的复杂性,增加使用它们的程序的复杂性。毕竟string和number是两个不同的东西。10 == “10”是false,因为10是一个number,而“10”是一个string。如果你想把string转换为number,显式地用函数tonumber,如果要转换的string不能被转为number,它返回nil。
将number转换为string,可以用函数tostring。另外,可以用“#”来取得一个string的长度。
水平有限,如果有朋友发现错误,欢迎留言交流。
分享到:
相关推荐
这个"lua基础学习文档"涵盖了对初学者至关重要的几个主题:lua函数库、模式匹配、文件处理以及表和元方法。让我们逐一深入探讨这些核心概念。 1. Lua函数库: Lua标准库提供了一系列内置函数,方便用户进行各种常见...
1. **Lua基础语法**:Lua是一种简洁、易读的脚本语言,它的基本语法包括变量(全局和局部)、数据类型(如数值、字符串、表、布尔值和nil)、运算符、控制结构(如if语句、while循环、for循环)等。理解这些基础是...
它支持五种基本数据类型:nil(无值)、boolean(布尔型)、number(数字)、string(字符串)和table(表)。表是Lua的通用数据结构,可以用于数组、集合、对象等多种用途。控制结构主要包括if语句、while和for循环...
### Lua基础学习笔记 #### 一、Lua简介与特点 Lua是一种轻量级且高效的脚本语言,广泛应用于游戏开发、网页应用、图形界面等领域。对于已有其他编程语言基础的学习者来说,掌握Lua通常较为迅速。Lua的设计哲学是...
同时,C++还可以通过lua_getglobal和lua_pcall等函数获取 Lua 全局变量的值和调用Lua函数。 2. **Lua调用C++函数**:为了使Lua能够调用C++函数,我们需要先在C++中注册这些函数。这通常通过lua_register或者lua_...
变量声明不需要指定类型,其数据类型包括数字(浮点数和整数)、字符串、布尔值、表(类似数组或哈希表)、函数以及nil。变量作用域默认为全局,但可以使用local关键字创建局部变量。 2. ** 表与元表 **:表是Lua的...
Lua 基础语法 Lua 语言是一种轻量级、灵活、可扩展的脚本语言,它的语法设计简单易学,功能强大。...在 Lua 中,Table, Function 和 Userdata 是三种特殊的数据类型。只有 == 和 ~= 可以用来比较这些类型的数据。
Lua是一种动态类型语言,其值可以是六种基本类型之一:nil、boolean、number、string、userdata和function,以及两种复合类型:table和thread(协程)。不同类型的值在Lua中有不同的表示方式和行为。 2. 环境和全局...
这个压缩包文件提供了一整套的LUA帮助文档,对于学习和深入理解LUA语言至关重要。其中包含的"Programming_in_Lua.chm"文件,是LUA的经典教程,由Mario J. Silva和Luiz Henrique de Figueiredo等人编写,是学习LUA的...
一、Lua基础 1. 变量:Lua中的变量没有类型声明,支持动态类型,即变量的类型根据赋值自动确定,包括 nil(空值)、boolean(布尔)、number(数字)、string(字符串)、table(表)、function(函数)和thread...
### 脚本策划LUA基础入门基础培训 #### 一、引言 脚本策划在游戏开发领域扮演着至关重要的角色,特别是在游戏逻辑和交互设计方面。本篇旨在为初学者提供关于脚本策划及LUA语言的基础知识,帮助他们更好地理解脚本...
- **Functions**:函数类型,是Lua中的一等公民,可以像其他类型的值一样被传递和返回。 - **Userdata and Threads**:用户数据类型,用于封装C语言的数据结构;线程类型,用于表示并发执行的上下文。 #### 四、...
一、Lua基础 Lua的基础部分涵盖了变量、数据类型、控制结构、函数、表(Lua的核心数据结构,类似于关联数组)等核心概念。变量在Lua中是动态类型的,可以存储任何类型的数据,包括整数、浮点数、字符串、布尔值以及...
Lua是一种轻量级的、解释型的、动态类型的脚本语言,它的设计目标是易于学习、使用和嵌入。Lua语法简洁,且提供了丰富的库支持,因此在游戏开发、自动化工具以及配置文件等领域广泛应用。 要让VS2010项目能够调用...
### Lua基础语法 1. **变量**:变量无类型限制,但有全局和局部之分,未声明的变量默认为全局。 2. **控制结构**:包含if...then...else...end,while,for等,用于逻辑控制。 3. **函数**:函数是第一类公民,可以...
- **值与类型**:Lua是一种动态类型语言,其基本类型包括nil、boolean、number、string、userdata、function、thread和table。每种类型的值都有相应的操作和行为。 - **环境表与全局环境**:Lua使用一个全局表来...
Lua中的数据类型包括数字(整数和浮点数)、字符串、布尔值、表(相当于数组和哈希的组合)、函数以及nil。例如,创建一个表: ```lua myTable = {key1 = "value1", key2 = 2, [3] = true} ``` 在3D场景中,我们...
Lua 是一种动态类型的编程语言,这意味着变量本身没有类型,只有值有类型。语言中不存在类型定义,所有值都携带自己的类型信息。 在 Lua 中,所有的值都是头等公民(first-class values),即所有值都可以存储在...
"lua_Console lua解析器"是一个针对Lua脚本的简易解析工具,旨在帮助用户执行和理解基础的Lua语句。这个解析器可能是用C++编写的,因为文件名中包含了"cLua.cpp"和"simple_main.cpp",暗示了它可能是C++实现的一个...