[英]translating working lua code (for hammerspoon) to fennel; expected userdata type
警告:我真的不知道 lua 或茴香,尽管我在类 lua 语言(python 等)和类茴香语言(clojure、elisp 等)方面确实有很多经验。
但是:我正在使用hammerspoon来管理我的mac 上的外部显示器配置。 我的 init.lua 文件中有以下正确工作的代码,用于将 Hammerspoon 转换为 go 获取我的外接显示器并将其切换为垂直:
function rotate90()
hs.screen.find('Dell'):rotate(90)
end
但后来我意识到我想使用预先构建的模态菜单工具包spacehammer ,它基本上就像hammerspoon 的 spacemacs ——但它是用 Fennel 编写的。 好的,我喜欢 lisp,我可以在 lisp 中处理配置文件,对吧?
所以首先我让 spacehammer 工作,并验证默认配置是否正常工作并且不会引发任何错误。 查看。
Then I go to port over my simple preexisting functions: I translate my lua function into a Fennel function with a slightly different name:
(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:在 function 中</Users/myhomedir/.spacehammer/config.fnl:22>
有趣的是,回溯中的行号根本不正确:在 config.fnl 中,这些行是注释。 但我认为它必须是新的 function,因为这就是我所做的全部更改,并且在尝试运行它时触发了错误。 但是我试图调用的hammerspoon rotate
方法肯定需要一个数字,而不是任何“用户数据”......
哎呀。 好的,这实际上是我对Fennel docs on method calls的误读。 我会留下这个问题,只是因为对于 Google 而言,这似乎是一个简单的问题。 但显然,带有句点的方法访问要求您第二次传递该方法所在的表的名称,而通过冒号进行的方法访问则不需要。 因此,我通过将最后一个表达式更改为(monitor:rotate 90)
来使其工作 --- 而且我猜(monitor.rotate monitor 90)
也可以工作,从文档的上述链接部分中的第三个示例来看?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.