我一個實例綁定到一個VAR:正確的Clojure到瓦爾
(ns org.jb
(:import (java.awt PopupMenu
TrayIcon
Toolkit
SystemTray)
(javax.swing JFrame
Action)))
(def ^:dynamic popupmenu)
(def ^:dynamic image)
(def ^:dynamic trayicon)
(def ^:dynamic tray)
(defn start-app [appname icon]
(binding [popupmenu (new PopupMenu)
image (.. Toolkit (getDefaultToolkit) (getImage icon))
trayicon (new TrayIcon image appname popupmenu)
tray (. SystemTray getSystemTray)]
(. trayicon setImageAutoSize true)
(. tray add trayicon)))
(start-app "escap" "res/escap_icon.png")
錯誤:
ClassCastException clojure.lang.Var$Unbound cannot be cast to java.awt.Image org.jb/start-app (org\jb.clj:17)
我預先定義的無功與
(def image)
甚至試過
(def ^:dynamic image)
無法理解消息的預期內容。
但是,使用let代替詞法範圍內的綁定工作。但是要實現動態綁定。
嗨亞歷克斯,雖然沒有提到,但我得到的例外是綁定本身。我使用的Clojure是1.4。稍後將用1.5.1進行檢查。謝謝。 – JayabalanAaron
我建議你編輯問題以顯示說明問題的完整示例,因爲您發佈的代碼示例對我來說不會引發異常。請參閱編輯答案以獲得一個可能的解 – Alex
嵌套綁定是解決方案,它爲let做的工作的原因相同。謝謝。 – JayabalanAaron