首页 > 解决方案 > 如何在 Clojure 的代理宏中使用“this”

问题描述

我有这样的代码:

(def prx (proxy [java.lang.Runnable] []
    (run 
      ([] (println "0000" 'this) 1))
    (toString ([] (str "------" 'this)))))

(.toString prx)

如何在代理宏中获取“this”引用?

标签: clojure

解决方案


您实现的每个方法都将this作为它们的第一个参数。

请参阅文档:

方法 fns 是闭包,可以捕获调用代理的环境。每个方法 fn 都需要一个附加的隐式第一个参数,该参数绑定到“this”。

另外,请查看这篇文章,了解何时使用proxyvs reifyvs的详细信息gen-class


推荐阅读