2
在寫一些one-off Lua code作爲答案時,我發現自己的代碼打高爾夫球以適合單線上的功能。儘管此代碼不適合在一行...通過函數參數聲明局部變量的功能影響
foo=function(a,b) local c=bob; some_code_using_c; return c; end
...我意識到,我可能只是使其適合通過將其轉換爲:
foo=function(a,b,c) c=bob; some_code_using_c; return c; end
是否有任何性能或功能的影響使用函數參數聲明函數局部變量(假設我知道第三個參數永遠不會傳遞給函數),而不是使用local
?這兩種技術的表現有何不同?
注:我包括在上述分號爲概念的清晰度和幫助那些誰不知道空白的Lua的處理。我知道他們沒有必要;如果你按照上面的鏈接,你會看到實際的代碼不使用它們。
編輯基於@岡的回答,我比較了這兩個函數生成的字節碼,在不同的文件:
function foo(a,b)
local c
return function() c=a+b+c end
end
function foo(a,b,c)
-- this line intentionally blank
return function() c=a+b+c end
end
忽略地址,字節碼報告相同(功能列出的參數數量除外)。
這是一個引人注目的論點,特別是兩個都列出了相同數量的「本地人」。 – Phrogz