Clojure gen-class 这个关键字
Clojure gen-class this keyword
是否可以从 gen-class 方法中引用 Java 的 'this' 关键字?
我正在尝试在 Clojure 中实现 daredesm 的答案 here。但是,当我尝试在 运行 函数中使用 'this' 时,我得到 "java.lang.RuntimeException: Unable to resolve symbol: this in this context."
(gen-class
:name ClipboardListener
:extends java.lang.Thread
:implements [java.awt.datatransfer.ClipboardOwner]
:prefix ClipboardListener-
:methods [[takeOwnership [Transferable] void]])
(def systemClipboard (.getSystemClipboard (java.awt.Toolkit/getDefaultToolkit)))
(defn ClipboardListener-run []
(let [transferable (.getContents systemClipboard this)]
(.takeOwnership transferable)))
(defn ClipboardListener-lostOwnership [clipboard trasferable] (prn "hit lost"))
(defn ClipboardListener-takeOwnership [transferable] (prn "hit take"))
(defn processClipboard [transferable clipboard] (prn "hit process"))
注意:这是我第一次在 Clojure 中生成 Java classes,因此非常感谢任何通用的 feedback/resources。
实例方法可以采用隐式 'self' arg- 作为第一个参数。举个例子:
(defn ClipboardListener-run [this]
(let [transferable (.getContents systemClipboard this)]
(.takeOwnership transferable)))
注意 this
参数 :)
同样适用于任何实例方法,例如:
(defn ClipboardListener-toString [this]
"override Object#toString with something cool")
查看 this(无双关语意)以了解有关 gen-class 的更多信息。
对于 Runnable
、Callable
、e.t.c 等情况,也请考虑 reify
,您只需要实现一个小型接口。
是否可以从 gen-class 方法中引用 Java 的 'this' 关键字?
我正在尝试在 Clojure 中实现 daredesm 的答案 here。但是,当我尝试在 运行 函数中使用 'this' 时,我得到 "java.lang.RuntimeException: Unable to resolve symbol: this in this context."
(gen-class
:name ClipboardListener
:extends java.lang.Thread
:implements [java.awt.datatransfer.ClipboardOwner]
:prefix ClipboardListener-
:methods [[takeOwnership [Transferable] void]])
(def systemClipboard (.getSystemClipboard (java.awt.Toolkit/getDefaultToolkit)))
(defn ClipboardListener-run []
(let [transferable (.getContents systemClipboard this)]
(.takeOwnership transferable)))
(defn ClipboardListener-lostOwnership [clipboard trasferable] (prn "hit lost"))
(defn ClipboardListener-takeOwnership [transferable] (prn "hit take"))
(defn processClipboard [transferable clipboard] (prn "hit process"))
注意:这是我第一次在 Clojure 中生成 Java classes,因此非常感谢任何通用的 feedback/resources。
实例方法可以采用隐式 'self' arg- 作为第一个参数。举个例子:
(defn ClipboardListener-run [this]
(let [transferable (.getContents systemClipboard this)]
(.takeOwnership transferable)))
注意 this
参数 :)
同样适用于任何实例方法,例如:
(defn ClipboardListener-toString [this]
"override Object#toString with something cool")
查看 this(无双关语意)以了解有关 gen-class 的更多信息。
对于 Runnable
、Callable
、e.t.c 等情况,也请考虑 reify
,您只需要实现一个小型接口。