Lua base tostring()

字符串.jpg

前言

前面一篇文章我們介紹了把參數(shù)轉(zhuǎn)換成數(shù)字的函數(shù),今天來(lái)看一個(gè)把參數(shù)轉(zhuǎn)換成字符串的函數(shù),話說(shuō)這個(gè)函數(shù)我在寫lua的時(shí)候幾乎每天都用到,這個(gè)函數(shù)適應(yīng)性簡(jiǎn)直太強(qiáng)了,無(wú)論你傳給它什么參數(shù),它都能轉(zhuǎn)換成字符串,而今天我看了一下文檔,發(fā)現(xiàn)這個(gè)函數(shù)居然還有進(jìn)階的用法,我們一起來(lái)看一下吧!

內(nèi)容


tostring

  • tostring (e)
  • 解釋:這個(gè)函數(shù)能接收任何類型的參數(shù),并且將參數(shù)轉(zhuǎn)換成一個(gè)合理格式的字符串,如果想要完全的控制轉(zhuǎn)換的邏輯,可以嘗試使用string.format函數(shù)。另外,如果被傳入的參數(shù)是一個(gè)包含元表的table,并且這個(gè)元表還正確的包含__tostring字段,那么當(dāng)這個(gè)table被作為參數(shù)傳入函數(shù)的時(shí)候就會(huì)調(diào)用__tostring對(duì)應(yīng)的函數(shù),同時(shí)使用e作為函數(shù)參數(shù),并且將函數(shù)的返回值作為'tostring'的返回值。

usage

  • 首先我們新建一個(gè)文件將文件命名為tostringtest.lua然后編寫代碼如下:
-- 定義一個(gè)等待轉(zhuǎn)換的列表
local wait_list = { 
    a = 13,
    b = "36",
    c = "52s",
    d = false,
    e = function() print("e") end,
}

-- 轉(zhuǎn)換已經(jīng)是數(shù)字的變量
print("\nwait_list.a =", tostring(wait_list.a))

-- 轉(zhuǎn)換全是數(shù)字的字符串
print("\nwait_list.b =", tostring(wait_list.b))

-- 轉(zhuǎn)換包含字母的字符串
print("\nwait_list.c =", tostring(wait_list.c))

-- 轉(zhuǎn)換值為false的變量
print("\nwait_list.d =", tostring(wait_list.d))

-- 轉(zhuǎn)換保存著函數(shù)的變量
print("\nwait_list.e =", tostring(wait_list.e))

-- 轉(zhuǎn)換一個(gè)為nil的變量
print("\nwait_list.f =", tostring(wait_list.f))


-- 轉(zhuǎn)換一個(gè)不存在元表的table
print("\nwait_list =", tostring(wait_list))

-- 設(shè)置一個(gè)不包含__tostring字段的元表
setmetatable(wait_list, {__index = {g = "index"}})
print("\nwait_list =", tostring(wait_list))

-- 查看元表是否生效
print("\nwait_list.g =", tostring(wait_list.g))

-- 設(shè)置一個(gè)包含__tostring字段的元表
setmetatable(wait_list, {__tostring = function (param) 
    return "this is a table named wait_list!" 
end})
print("\nwait_list =", tostring(wait_list))
  • 運(yùn)行結(jié)果
base_tostring.png

總結(jié)

  • 通過(guò)轉(zhuǎn)換變量a、bc、d、ef的值可知,這個(gè)函數(shù)簡(jiǎn)直就是一個(gè)大胃王,不管什么類型的參數(shù)都能轉(zhuǎn)換成相應(yīng)的字符串。
  • 通過(guò)給表wait_list設(shè)置包含__tostring字段的元表,可以通過(guò)自定義函數(shù)來(lái)決定返回的字符串內(nèi)容。
  • 我嘗試了給元表的__tostring字段設(shè)置一個(gè)table,但是會(huì)報(bào)錯(cuò),貌似這里只能是一個(gè)函數(shù)。
  • 注意在__tostring字段的函數(shù)中,不能在使用tostring(param),這樣會(huì)死循環(huán)造成堆棧溢出,但是參數(shù)如果改變成其他的是沒(méi)問(wèn)題的。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程,因...
    小菜c閱讀 7,380評(píng)論 0 17
  • Nginx API for Lua Introduction ngx.arg ngx.var.VARIABLE C...
    吃瓜的東閱讀 6,109評(píng)論 0 5
  • 第一篇 語(yǔ)言 第0章 序言 Lua僅讓你用少量的代碼解決關(guān)鍵問(wèn)題。 Lua所提供的機(jī)制是C不擅長(zhǎng)的:高級(jí)語(yǔ)言,動(dòng)態(tài)...
    testfor閱讀 2,974評(píng)論 1 7
  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,691評(píng)論 0 4
  • 這是今年第二次破財(cái)了 第一次是在五月份,錢包被小偷偷走,損失了兩百 不過(guò)慶幸的是,有好心人撿到了錢包并還給了我,從...
    七嶼PHOTO閱讀 275評(píng)論 2 0

友情鏈接更多精彩內(nèi)容