Lua 語言的陷阱

Lua 語言核心很小,用純 C 構建,方便嵌入許多系統,並且語法簡潔,文檔齊備,還有速度更快的 LuaJIT 的解釋器。因此決定用這種語言實現 Spp 的算法。算法

Lua 的標準庫很小,JSON, 和 Seriarial Data 的模塊都是第三方提供的,出了問題,是極可能的事情。數組

  1. Lua 數組的索引值是從 1 開始的,這和其餘語言不一樣,因此數組的長度和最後一個索引的值是相等的。我想這更直觀,但習慣了別的語言後,就會對這個特性很疑惑。數據結構

  2. Lua 的 Table 實現的 Hash,雖然 Lua 容許任何值,包括 table 作 key, 但查看這種數據的 JSON, DataDumper 模塊都不支持 key 是 table 的數據結構,沒法查看,因此出了問題也不知道。函數

  3. Lua 的正則是用百分號引發的:%d %s %D %S, 數量標誌還有減號,aa-, 等同於別的語言的 aa*?, Lua 沒有split, 但有 join, 就是 table.concat, 只能合併字符串和數字,別的數據類型會讓 Lua 崩潰。(而不是報錯)索引

  4. Lua 的 table, push (table.insert)之後,返回的值不必定是變化後的 table, 多是 nil, 不能這樣寫:ip

    t = table.insert(t, 1, x)文檔

Lua 會悄無聲息的將你的數據給抹殺掉。字符串

  1. Lua 的 table 沒法對比,即便: {1,2} == {1,2} 也是返回 false. 想要對比,就要逐個 key, value 的對比,直到對比的是數據。hash

  2. Lua 遍歷 Array,Hash 的關鍵字是不一樣的,但都要聲明 key, Array 也能用 pairs(array), 而 Hash 就不能用 ipairs(hash).it

  3. 輸出不帶回車的函數是 io.write, print 默認是帶回車的。

另外 Lua 的函數聲明關鍵字 function 太長了,若是短一些,會更好。Lua 的比較操做符 不等因而 '~=' 而不是 '!=', 只能說這個巴西人和別人不一樣。

相關文章
相關標籤/搜索