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

(符号 (.getName cls))

您仍然无法与case一起使用它,因为它预期的是字面量,而不是绑定/形式。但您可以使用(condp = ...),尽管在这种情况下,使用instance?可能更合适。

我在想`(case (class obj) java.some.Class :a java.other.Class :b)`。
...