522. 【Lua】类型和值(二)

一、字符串

Lua 语言中的字符串是不可变值(immutable value)。我们不能像在 C 语言中那样直接改变某个字符串中的某个字符,但是我们可以通过创建一个新字符串的方式来达到修改的目的,例如:

> a = "one string"
> b = string.gsub(a, "one", "another")
> a
one string
> b
another string

像 Lua 语言中的其他对象(表、函数等)一样,Lua 语言中的字符串也是自动内存管理的对象之一。这意味着 Lua 语言会负责字符串的分配和释放,开发人员无需关注。

可以使用长度操作符(length operator)(#)获取字符串的长度:

> a = "hello"
> print(#a)
5
> print(#"good bye")
8

该操作符返回字符串占用的字节数,在某些编码中,这个值可能与字符串中字符的个数不同。

我们可以使用连接操作符 ..(两个点)来进行字符串连接。如果操作数中存在数值,那么 Lua 语言会先把数值转换成字符串:

> "Hello " .. "World"
Hello World
> "result is " .. 3
result is 3
  • 在某些语言中,字符串连接使用的是加号,但实际上 3 + 5 和 3 .. 5 是不一样的。

应该注意,在 Lua 语言中,字符串是不可变量。字符串连接总是创建一个新字符串,而不会改变原来作为操作数的字符串。

> a = "Hello"
> a .. " World"
Hello World
> a
Hello

二、强制类型转换

如果需要显式地将一个字符串转换成数值,那么可以使用函数 tonumber。当这个字符串的内容不能表示为有效数字时该函数返回 nil;否则,该函数就按照 Lua 语法扫描器的规则返回对应的整型值或浮点类型值。

> tonumber("   -3   ")
-3
> tonumber(" 10e4 ")
100000.0
>
> tonumber(" 10e  ")
nil
> tonumber("0x1.3p-4")
0.07421875

默认情况下,函数 tonumber 使用的是十进制,但是也可以指明使用二进制到三十六进制之间的任意进制:

> tonumber("100101", 2)
37
> tonumber("fff", 16)
4095
> tonumber("-ZZ", 36)
-1295
> tonumber("987", 8)
nil
  • 在最后一行中,对于指定的进制而言,传入的字符串是一个无效值,因此函数 tonumber 返回 nil。

调用函数 tostring 可以将函数值转换成字串:

> print(tostring(10) == "10")
true
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua是动态类型语言,变量不需要类型声明,每一个变量都可能包含任一种类型值。一般情况下,同一变量表示不同类型的值会...
    木雁之阅读 3,535评论 0 0
  • 注:lua5.0以上版本去除了table.getn方法,可以用#tableName代替 Lua是动态类型语言,变量...
    _小圆球_阅读 1,456评论 0 0
  • Lua是动态类型语言,变量不要类型定义。Lua中有8个基本类型分别为:nil、boolean、number、str...
    CDLOG阅读 1,196评论 0 0
  • 类型与值 lua 是动态类型的语言 在语言中没有类型定义的语法 每个值都携带有它的类型信息 8种基础类型 用 ty...
    跃千山阅读 1,859评论 0 1
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,736评论 0 38