请在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)`。
...