我无法理解以下内容。我有以下代码:局部变量只在另一行声明时才起作用
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('...,因为空格,注释和';'是语句分隔符(但是,这会让阅读变得更加困难) –