我無法理解以下內容。我有以下代碼:局部變量只在另一行聲明時才起作用
awful.key({ "Mod1" }, "Tab",
function (c)
local grabber = awful.keygrabber.run(
function(mod, key, event)
if grabber == nil then
naughty.notify({ text="nope"})
end
awful.keygrabber.stop(grabber)
return
end)
end)
這應該抓住鍵盤當我按超級 + 標籤然後通過調用stop方法釋放鍵盤焦點。但是grabber
變量似乎是nil
。起初我以爲這是一個範圍問題,所以我刪除了local
,這個工程。不過,我有這樣的感覺,好像這不是解決這個問題的方法。
瞎搞它後,我發現了這個工程:
awful.key({ "Mod1" }, "Tab",
function (c)
local grabber
grabber = awful.keygrabber.run(
function(mod, key, event)
if grabber == nil then
naughty.notify({ text="nope"})
end
awful.keygrabber.stop(grabber)
return
end)
end)
唯一的區別是變量grabber
是在一行中所定義,後來被分配一行。爲什麼我不能在同一行上做這件事?
局部變量的範圍從**聲明後的第一個語句**開始,一直持續到包含該聲明的最內層塊的最後一個非void語句。 [手冊](http://www.lua.org/manual/5.2/manual.html#3.5) –
有趣的是,本地抓取者抓取器= awful.keygrabber.run('...,因爲空格,註釋和';'是語句分隔符(但是,這會讓閱讀變得更加困難) –