我有一個函數可以創建一個對象(在本例中是一個Hammerspoon Notify對象),我想將這個對象作爲參數傳遞給本身的匿名函數一個函數調用的參數。用局部變量調用一個匿名函數作爲參數
這是一個非常複雜的解釋,但我認爲一個例子很清楚。
function main()
local n = hs.notify(...)
print(n) -- `hs.notify: Title (0x7fbd2b5318f8)`
hs.timer.doAfter(1, function(n)
print(n) -- nil
n:withdraw() -- error: attempt to index a nil value (local 'n')
end)
end
的這個輸出是n
打印精第一次(hs.notify: Title (0x7fbd2b5318f8)
),但是nil
所述第二時間,所述匿名函數的內部,並且引發一個錯誤:attempt to index a nil value (local 'n')
。
這種說法很有道理,因爲我從來沒有真正把它傳入。有沒有辦法將它傳入? 的hs.timer.doAfter
呼叫的簽名是:hs.timer.doAfter(sec, fn) -> timer
(http://www.hammerspoon.org/docs/hs.timer.html#doAfter)
是否有良好的IDE或靜態代碼分析器可供您使用?如果您拿走了第一個(或全部)'print(n)'語句,一個好的IDE會警告您,您已經爲'n'分配了一個永遠不會使用的值,這將幫助您檢測Kurt在他的解釋中隱藏的[應答](http://stackoverflow.com/a/38407417/2226988)。 –