David Manura |
|
有 Lua wiki 頁面和專案是我有參與的。
程式碼和專案
Bit
Op 'bit' 相容介面。checkglobals
函式是 etc/strict.lua
和 luac -p -l - | lua test/globals.lua
的替代方案。一般主題、模式、技巧和設計
module
函式
Library 模組載入的問題nil
未明示儲存在表格中的問題相關
function() ... end
的寫法更簡潔o:f()
和 o.f()
的區別其他文件之註解/批註
以下是令我有點困擾的事,儘管我不確定是否能對所有情況想出辦法。
f(...)
變更為 local ok, err = pcall(f, ...); if not ok then error(err) end
或 assert(pcall(f, ...))
會對回溯行為產生副作用。 LuaList:2012-02/msg00858.htmlerror
函式中使用的 level
參數缺乏可維護性。將 f()
變更為 (function() return f() end)()
會對層級行為產生副作用,且沒有選項可以阻止改變堆疊層級。 LuaCarp 是很早以前提升這一點的努力。另請參閱 [6][7]。至少在 5.2 工作中,getfenv/setfenv 大多被移除,且模組中 setfenv 的行為已不推奨,因此正朝著正確的方向前進。assert
函式的名稱取得不當: [8]。此外,失敗會持續評估表示式。_ENV = require '_G53'
?local ok, err = f(); if not ok then return ok, err end
是常見的慣用表達方式。是否應該簡化?printf "${x},${y},${x}"
的內容擴充為 printf("${x},${y},${x}", x, y, x)
,之後再於執行時評估結果,這可能不失為一種折衷方案。local two local function one() two() end function two() one() end -- forward declared local (misleadingly looks like global)
package.path
和 package.cpath
是字串,而非陣列。 LuaList:2010-06/msg00214.html . 這導致產生「lib」模組 [4]。for _,v in ipairs(t) do
十分醜陋,且其效率不如 for i=1,#t do local v=t[i] do
。這兩種形式在 __len
的處理方式也不相同。
但書:下方清單可能無法完全反應最終的 5.2.0 發行版本,且可能需要進一步清理。
我想要的這些變更包含在 5.2 的工作版本中 (LuaFiveTwo)
Op(Lua
JIT 支援,並取代 lbitlib)。請參閱 BitwiseOperators/[5] 5.2 版和 LuaJIT 的位元函式庫應該都適用於大多數的用途,而且可以撰寫與兩者都相容的程式碼:`local band = bit.band or bit32.band`(只要避免不相容的情況即可)。是否應該加入 bitfield 獲取/設定運算?[17]hex 'cdef'
或 binary '0101'
,但何必呢?以下是 5.2 中未解決的其他舊觀念,我尚未決定是否將它們移至 5.3 的願望清單
...
的處理有些奇怪,除非將它複製到表格中(效率較低)和正確處理 nil
。請另見 VarargTheSecondClassCitizen。類似建議的 #... 和 ...[i] 有所幫助,儘管該特定語法則有問題。羅伯托在此總結兩難處境:LuaList:2010-06/msg00434.html。然而,一些微小的進步是有可能的。lua_createtable
[34]。請參閱 TablePreallocation 以了解預先配置(未討論清除)。x*x
通常比 x^2
快,因為 Lua 無法在編譯時期將後者簡約為前者(想想:x
可能有一個 __pow
元方法)。巨集處理可以緩解此問題(例如:「將「y = SQUARE(x+y) + 1」轉換為「y = (let t1 = x+y in t*t) + 1」)請參閱 LuaJIT 和 LuaToCee。全域的(或至少全檔案的)流程分析可以在此處提供協助。