lua strings和numbers的类型转换

lua strings和numbers的类型转换

在我们项目的lua脚本中,经常会看到下面形式的代码

local Key = 'domain:' .. ARGV[1] .. ':sub'

可以看到在构建redis的key时,有两个 .. 符号用于构建字符串。

..在lua中是字符串连接符,当在一个数字后面写..时,必须加上空格以防止被解释错。

lua会自动在string 和numbers之间自动运行类型转换,当一个字符串使用算术操作符时,string就会被转化成数字。

[root@localhost ~]# luaLua 5.3.1  Copyright (C) 1994-2015 Lua.org, PUC-Rio> print("10" + 1)11.0> print("10+2")10+2> print("hello" +1)stdin:1: attempt to perform arithmetic on a string valuestack traceback:        stdin:1: in main chunk        [C]: in ?

发过来,当lua期望一个string而碰到数字时,会将数字转化成string.

> print(100 .. 20)10020

..在Lua中是字符串连接符,当在一个数字后面写..时,必须加上空格以防止被解释错。

尽管字符串和数字可以自动转换,但是两者是不同的,像 10=="10"这样的比较都是错的。

> print( 10 == "10")false

如果需要显式将string转成数字可以使用函数tonumber(),如果string不是正确的数字该函数将返回nil。

> str = 10 ..20> str1020> print( str == 1020)false> print( tonumber(str) == 1020)true

反之,可以调用tostring()将数字转成字符串,这种转换一直有效:

> print( tostring(10) == "10")true> print( 10 .. "" == "10")true

参考文章:http://book.luaer.cn/

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部