我正在嘗試對函式進行本地覆寫,以便我可以丟棄回傳的第一個值,并且該函式將只回傳一個值(通常作為其第二個值回傳)。
local r.functionName()
discardVar,keepVar = r.functionName()
return keepVar
end
但是,當我運行此腳本時,我看到一個錯誤:
'(' expected near '.'
我不知道如何使這項作業。我只寫過沒有“。”的函式。在函式名中。我不確定它是否正確,但我想,在這種情況下,“r”將是包含我想要在本地覆寫的函式的庫(或者可能是“環境”?)。
基本上,期望的結果是函式只回傳一個值而不是兩個;只有通常作為第二個回傳值回傳的值。
我最接近成功的是合法的堆疊溢位,所以這似乎是詢問它的正確地方。:)
r.functionName()
discardVar,keepVar = r.functionName()
return keepVar
end
uj5u.com熱心網友回復:
首先保存函式
local f = r.functionName
然后用你的實作替換它
r.functionName = function()
local discardVar,keepVar = f()
return keepVar
end
請注意,這也將替換庫中的函式r,因此如果庫本身在內部依賴于此函式名稱,它可能會失敗。
uj5u.com熱心網友回復:
你可以做...
> -- I need to construct r with an example function
> r = {}
> r.functionName = string.gsub
> -- You start here ;-)
> replaced = r
> r = {}
> -- Fill r with replaced key/value pairs one by one
> -- So new references will be created
> -- Means: Changing r not changing replaced ( r ~= replaced )
> for k, v in pairs(replaced) do r[k] = v end
> -- Now replace r.functionName() with a function that calls replaced.functionName()
> r.functionName = function(...)
>> local f, s = replaced.functionName(...)
>> return(s) -- Syntax makes sure that only s will be returned
>> end
> r.functionName(_VERSION, '.', '')
7
> #{r.functionName(_VERSION, '.', '')} -- Number of return values
1
> -- r can than be replaced again (restored/cleanup)
> r = replaced -- Descruct of above r.functionName
> replaced = nil -- Destruct of replaced
> collectgarbage('collect') -- Freeing unused memory
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/528285.html
標籤:功能lua压倒一切当地的
上一篇:有效三角形哈佛cs50練習題
下一篇:如果條件回傳,函式不會停止
