在使用 lua 的 unpack
語法一定要特別注意,如果已經知道參數的數量,那會強烈建議不要使用 unpack。
測試條件
- 迴圈執行次數
一百萬
次 - table 長度
5
選手一 unpack
1 | local style1 = function() |
選手二 get value directly
1 | local style2 = function() |
結果
1 | elapsed: 75.28 ms // style1: unpack |
結論
如果已經確定知道長度,還是不要使用 unpack
語法,可以看到效率是差到百倍以上。
有的人想到可以使用 #
來取得長度,是也是沒錯,但是要確保丟入參數沒有 nil
,不然會算錯。
演示: length of table
準備了一組含有 nil 的測試資料…
1 | testTable = { |
結果:
1 | 1: 1 |
從結果來看,如果不能保證沒有 nil
,就還是盡量避免使用 #
取得長度。
*還是有方法可以算出正確的長度,但效能上不見得值得
完整 Code
1 | loopCount = 1000000 --100萬 |