【问题标题】:Type hinting return value with ^ or :tag meta?用 ^ 或 :tag meta 输入提示返回值?
【发布时间】:2011-09-23 00:23:13
【问题描述】:

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

(defn a ^int [] 4)

(defn b ^{:tag int} [] 4)

我希望它是a,因为它更短。

【问题讨论】:

标签: clojure type-hinting


【解决方案1】:

它的“a”是规范的。它是迄今为止我在 Clojure 代码和 Clojure 站点上的文档中看到的唯一一个。有关类型提示的更多信息,请参阅 here

希望这会有所帮助。

【讨论】:

  • 如果存在速度差异,我会感到非常惊讶。它可能编译得更快,但它应该运行相同,并且编译只发生一次。你有用来测试这个的基准吗?
  • +1 你的权利,再次测试,我所用的时间各不相同,但它们看起来都很相似,所以可能没有速度增加。相应地编辑了帖子。
  • +1。另外值得注意的是,(a) 实际上只是 (b) 的语法糖,因此它们在运行时会产生相同的结果。
  • +1 感谢您清理 mikera。我认为两者都是等价的,但找不到任何确认。
【解决方案2】:

当我需要包含元数据而不仅仅是标签时,我只使用b。例如,在实现瞬态集合时,我需要

(deftype Whatever [^{:tag ITransientVector
                     :unsynchronized-mutable true} foo])

请注意,它是等效的并且完全可以接受

(deftype Whatever [^:unsynchronized-mutable ^ITransientVector foo])

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

【讨论】:

    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    相关资源
    最近更新 更多