我正在使用的一些 Java 代码调用了 toString()
在我的 Clojure 函数对象上,它返回类似于 #<ns$something something.something$something@7ce1eae7>>
的内容- 我想返回其他东西......大概有一种方法可以在函数中包含一些元数据,以便它们的对象'toString()
返回那个?
最佳答案
如果你只是想让你的对象的 REPL 输出更有意义,你可以实现一个 defmethod print-method
对于有问题的类(class)。
这是我最近写的一些代码的简化版本;这使得 Selenium-WebDriver WebDriver 对象的 REPL 打印输出更有意义:
(defmethod print-method WebDriver
[o w]
(print-simple
(str "#<" "Title: " (.getTitle o) ", "
"URL: " (.getCurrentUrl o) " >")
w))
这打印出来像 #<Title: A Title, URL: http://example.com >
在这里,WebDriver
代表一个类;您可以通过实现 print-method
轻松地为内置的 Clojure 数据结构执行此操作对于适当的类(The Joy of Clojure 的特点是 print-method
代表 clojure.lang.PersistentQueue
,默认情况下没有很好的表示)。 o
上面是你正在处理的实际对象和w
是一个作家(这些类型的打印功能需要)。
关于java - Java 的 toString() 对 Clojure 函数的等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5306015/