微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将工作 lua 代码用于hammerspoon翻译成茴香;预期的用户数据类型

如何解决将工作 lua 代码用于hammerspoon翻译成茴香;预期的用户数据类型

警告:我真的不了解 lua 或 fennel,尽管我在类似 lua 的语言(python 等)和类似 fennel 的语言(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 中: 在函数 /myhomedir/.spacehammer/config.fnl:22>

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

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。