在我们项目的lua脚本中,经常会看到下面形式的代码
local Key = 'domain:' .. ARGV[1] .. ':sub'
可以看到在构建redis的key时,有两个 .. 符号用于构建字符串。
..在lua中是字符串连接符,当在一个数字后面写..时,必须加上空格以防止被解释错。
lua会自动在string 和numbers之间自动运行类型转换,当一个字符串使用算术操作符时,string就会被转化成数字。
[root@localhost ~]# lua
Lua 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 value
stack 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
> str
1020
> print( str == 1020)
false
> print( tonumber(str) == 1020)
true
反之,可以调用tostring()将数字转成字符串,这种转换一直有效:
> print( tostring(10) == "10")
true
> print( 10 .. "" == "10")
true
来源:oschina
链接:https://my.oschina.net/u/1475335/blog/508971