最近在使用lua開(kāi)發(fā)的過(guò)程中,遇到了一個(gè)由于語(yǔ)言機(jī)制導(dǎo)致的bug,具體表現(xiàn)就是,我的配置文件中存了個(gè)兩個(gè)表項(xiàng),在用lua加載配置文件內(nèi)容之后,返回的表長(zhǎng)度竟然是1,然后導(dǎo)致后面的判斷都出錯(cuò)了,在初次調(diào)試這個(gè)bug的時(shí)候完全是百思不得其解,把配置文件看了又看,確實(shí)有兩個(gè)表項(xiàng)沒(méi)錯(cuò),但是通過(guò)#運(yùn)算符得到的表長(zhǎng)度始終是1,于是我用公司同事寫(xiě)的一個(gè)打印table模塊將返回的table的鍵和值都打印出來(lái)看了一下,于是就發(fā)現(xiàn)問(wèn)題了。
原來(lái)在lua中,如果我這樣聲明:
local a = {}a[1] = 1a[2] = 2a[4] = 4PRint(#a)那么輸出的結(jié)果就是2,而不是3,這就是比較疑惑的地方了,因?yàn)槲覀兠髅髦辣砝锩婷髅饔腥齻€(gè)元素,但是輸出的表長(zhǎng)度卻是2,這就是因?yàn)?這個(gè)運(yùn)算符只能處理下標(biāo)連續(xù)的table,這里我們聲明的時(shí)候沒(méi)有下標(biāo)為3的元素,所以lua在計(jì)算長(zhǎng)度的時(shí)候就不會(huì)去看不連續(xù)的元素了,這也提醒了我們開(kāi)發(fā)者,對(duì)于#操作符一定要慎重使用,否則因?yàn)檫@種問(wèn)題導(dǎo)致的bug確實(shí)挺難調(diào)的。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注