1

警告:我并不真正了解 lua 或茴香,尽管我在类 lua 语言(python 等)和类茴香语言(clojure、elisp 等)方面确实有很多经验。

但是:我正在使用hammerspoon来管理我的mac 上的外部显示器配置。我在我的 init.lua 文件中有以下正确工作的代码,供hammerspoon 获取我的外部显示器并将其切换为垂直:

function rotate90()
   hs.screen.find('Dell'):rotate(90)
end

但后来我意识到我想使用预先构建的模态菜单工具包spacehammer,它基本上就像hammerspoon 的 spacemacs ——但它是用 Fennel 编写的。好的,我喜欢 lisp,我可以在 lisp 中处理配置文件,对吧?

所以首先我让 spacehammer 工作,并验证默认配置是否正常工作并且不会引发任何错误。查看。

然后我转到我简单的现有函数的移植:我将我的 lua 函数转换为名称略有不同的 Fennel 函数:

(fn rotate-vertical []
  (let [monitor (hs.screen.find "Dell")]
    (monitor.rotate 90)))

正确的?这是您的基本 lisp 翻译,应该可以正常工作。但是当我尝试运行它时,突然间我收到了来自 c-land 的错误:

2021-02-19 17:24:59: 17:24:59 错误:LuaSkin:hs.timer 回调错误:/Users/myhomedir/.spacehammer/config.fnl:24:错误:参数 1 的“数字”类型不正确(预期的用户数据)堆栈回溯:[C]:在字段“旋转”/Users/myhomedir/.spacehammer/config.fnl:24:在函数中</Users/myhomedir/.spacehammer/config.fnl:22>

有趣的是,回溯中的行号根本不正确:在 config.fnl 中,这些行是注释。但我认为它必须是新功能,因为这就是我所做的全部更改,并且在尝试运行它时触发了错误。rotate但是我试图调用的hammerspoon方法肯定需要一个数字,而不是任何“用户数据”......

4

1 回答 1

1

哎呀。好的,这实际上是我对Fennel docs on method calls的误读。我会留下这个问题,只是因为对于 Google 而言,这似乎是一个简单的问题。但显然,带有句点的方法访问要求您第二次传递该方法所在的表的名称,而通过冒号进行的方法访问则不需要。因此,我通过将最后一个表达式更改为 (monitor:rotate 90)--- 来使其工作,我想 (monitor.rotate monitor 90)从文档的上述链接部分中的第三个示例来看,它也可以工作?

于 2021-02-20T00:12:52.817 回答