オブジェクト(この場合は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'に割り当てていることを警告します。 [答え](http://stackoverflow.com/a/38407417/2226988)。 –