簡體   English   中英

將工作 lua 代碼(用於錘子勺)翻譯成茴香; 預期的用戶數據類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM