lua strings和numbers的類型轉換

在咱們項目的lua腳本中,常常會看到下面形式的代碼
redis

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

能夠看到在構建redis的key時,有兩個 .. 符號用於構建字符串。dom

..在lua中是字符串鏈接符,當在一個數字後面寫..時,必須加上空格以防止被解釋錯。函數

lua會自動在string 和numbers之間自動運行類型轉換,當一個字符串使用算術操做符時,string就會被轉化成數字。lua

[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.spa

> print(100 .. 20)
10020

..在Lua中是字符串鏈接符,當在一個數字後面寫..時,必須加上空格以防止被解釋錯。code

儘管字符串和數字能夠自動轉換,可是二者是不一樣的,像 10=="10"這樣的比較都是錯的。orm

> print( 10 == "10")
false

若是須要顯式將string轉成數字能夠使用函數tonumber(),若是string不是正確的數字該函數將返回nil。字符串

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

反之,能夠調用tostring()將數字轉成字符串,這種轉換一直有效:get

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

參考文章:http://book.luaer.cn/
string

相關文章
相關標籤/搜索