请在 2024 年 Clojure 状态调查! 分享您的想法。

欢迎!请参阅 关于 页面了解如何使用本站。

0
编译器

调用 class 会返回对象的类的一个实例,它将打印为类名,但实际使用较难(比如在 case 分支中)。是否有帮助的辅助函数将返回对象的类符号代表会很有用。

我认为我们可能不会添加这个功能,这看起来很简单,可以自己实现。
嘿嘿,我猜是这样。如果你在乎这些,就做一个顶级回答,我会把它标记为已完成。
我们可以让它保持开放,看看随着时间的推移是否积累了一些东西,这只是我的第一印象。

2 个回答

+1

完成这个任务的最简单方法是

(case (.getName (class c))
  "java.lang.String" "We got a string!"
  "[[I"              "An array of arrays of int.")

我建议直接使用字符串而不是尝试将它们转换为符号,因为Java类的名称可能非常繁琐,如果它是数组,则前方会有方括号,如果是嵌套类,则包含内嵌的美元符号。

还要注意,仅仅名称不足以唯一标识一个类;可能存在由不同类加载器加载且不互相兼容的具有相同名称的类。然而,在大多数情况下,当你考虑这种类型的 case 表达式时,这可能不会成问题。

0

(symbol (.getName cls))

由于它期望字面量而不是绑定/表单,因此您仍然无法将其用于 case。但您可以使用 (condp = ...),尽管在这一点上,使用 instance? 可能更合适。

我正在考虑 (case (class obj) java.some.Class :a java.other.Class :b)
...