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

欢迎!请查阅关于页面以了解更多这个平台的工作原理。

+2
编译器

在可能的情况下,使用参数数量(arity)来引导方法重载去歧义,以减少对提示的需求。例如:

(map ^[int] Integer/toString [0 1 2 3])

这里,编译器由于缺乏类型推断需要提示。然而

(^[] String/toLowerCase "Foo")

似乎这个例子应该能够根据arity进行去歧义,而无需提示。

1 个答案

+1

这是设计上的决定 - 在限定构造函数、实例方法和静态方法符号的调用或值位置,必须通过if参数标签明确指定一个方法arity/重载。不进行推断,不发生反射,如果方法模糊,则你会得到编译器异常。

一个特殊情况是调用位置的静态方法,因为这是唯一允许限定方法的现有位置,而且之前使用了推断。为了保持向后兼容性,在这种情况下仍将使用推断(如果未提供参数标签)。

...