我在osx上使用一个名为hammerspoon的自动化软件。
当我在hammerspoon的控制台中使用以下代码时,win为空:
> local win = hs.window.focusedWindow()
> win
nil但实际上该函数返回了一些值:
> hs.window.focusedWindow()
hs.window: Hammerspoon Console (0x60000025f798)这种奇怪的行为破坏了所有窗口移动/调整大小的功能,例如:
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "H", function()
local win = hs.window.focusedWindow()
local f = win:frame()
f.x = f.x - 10
win:setFrame(f)
end)Hammerspoon给出了这个错误:
/Users/mertnuhoglu/.hammerspoon/init.lua:6: attempt to index a nil value (local 'win')
stack traceback:
/Users/mertnuhoglu/.hammerspoon/init.lua:6: in function </Users/mertnuhoglu/.hammerspoon/init.lua:4>
stack traceback:我不知道这个问题是由我的电脑还是其他什么原因引起的。
我有osx yosemite,版本10.10.5和hammerspoon 0.9.43。
更新:
我找到了这个错误的解决方案。这是由于osx的隐私设置造成的。
解决方案:
Prefences > Security > Privacy > Allow Apps: Hammerspoon但我仍然不明白,如果没有赋值给变量,为什么hs.window.focusedWindow()会返回一些东西,而当赋值给变量时,它会返回nil。
发布于 2017-01-02 19:51:21
Hammerspoon将每一行作为它自己的块来执行,因此局部变量只在该块中可用,并且一旦该块被执行就不再可用。
如果你想在区块执行后访问变量,将它们设置为全局的,即删除'local‘关键字。
https://stackoverflow.com/questions/34743870
复制相似问题