使用^或:tag meta键入提示返回值?

Pau*_*Lam 10 clojure type-hinting

这两个似乎在Clojure中做同样的事情.哪种语法是规范的?

(defn a ^int [] 4)

(defn b ^{:tag int} [] 4)
Run Code Online (Sandbox Code Playgroud)

我希望它是a因为它更短.

ama*_*loy 8

我只b在需要包含除标签之外的元数据时使用.例如,在实现瞬态集合时,我需要

(deftype Whatever [^{:tag ITransientVector
                     :unsynchronized-mutable true} foo])
Run Code Online (Sandbox Code Playgroud)

请注意,编写它是等效的,完全可以接受

(deftype Whatever [^:unsynchronized-mutable ^ITransientVector foo])
Run Code Online (Sandbox Code Playgroud)

但我个人更喜欢显式地图.


ada*_*ham 5

它的'a'是规范的.它是迄今为止我在Clojure代码和Clojure网站上的文档中看到的唯一一个.有关类型提示的更多信息,请参见此处.

希望这可以帮助.

  • 如果有速度差异,我会非常惊讶.它*可能*编译一个头发更快,但它应该运行相同,编译只发生一次.您是否拥有用于测试此基准的基准? (3认同)
  • +1.还值得注意的是(a)实际上只是(b)的语法糖,因此它们在运行时产生相同的结果. (2认同)