欢迎!请参阅关于页面以了解更多关于本站如何运行的信息。
(.a ""),当然,会抛出IllegalArgumentException异常,但没有:phase。
(.a "")
然而,可以考虑这种IllegalArgumentException是“编译器-like”,尽管它在更多“运行时-like”情况下抛出的其他IllegalArgumentException中似乎并不主要区分。
问题在于,作为工具制造商,如果没有这种区别,所有IllegalArgumentException都将受到相同处理,而用户希望对于类似于编译器的那些给以更加简洁的处理(例如,不显示回溯)。
:cause
:phase
:ex-data
我不会将其视为“一开始就无效的代码”或编译器类的代码。这是一段语法有效的代码。如果成员不被识别,它将回退到反射调用,这可能在运行时失败。因此,你可以将其视为“Clojure运行时异常”或类似的东西,但我们没有在这情况下发生任何一致的事情,而且可能有一百多个类似的地方。
通常不会捕获运行时异常,因为我们希望流动抛出的内容。也许在Clojure运行时抛出一个携带额外信息的标准异常会有所帮助,但我不确定在这个阶段是否可行更改。
这是在Clojure 1.12.0-alpha6的新统一限定方法语法中提供的。
而不是使用`(.a "")`,请使用类/成员语法。在这种情况下,`(String/.a "")`。这将编译(这表明Clojure编译器找到了匹配输入的唯一方法),或者将抛出一个语法异常(这表明它找到了0个匹配方法或多个匹配方法)。
通过仅使用此语法,你可以确保你总能匹配到具体的方法,而无需反射。