在clojure函数参数定义中使用^

时间:2018-05-20 03:54:06

标签: clojure

(defn lines
  "Given an open reader, return a lazy sequence of lines"
  [^java.io.BufferedReader reader]
  (take-while identity (repeatedly #(.readLine reader))))

这条线是什么意思? - > [^java.io.BufferedReader reader]

我也知道这是一个愚蠢的问题。你能给我看一下我自己可以阅读的文件吗?所以我不必在这里问它:)

1 个答案:

答案 0 :(得分:4)

您可以在此处找到文档:

https://clojure.org/reference/java_interop#typehints

  

Clojure支持使用类型提示来帮助编译器避免在性能关键的代码区域中反映。通常,在存在已知性能瓶颈之前,应避免使用类型提示。类型提示是放置在编译器使用的符号或表达式上的元数据标记。它们可以放在函数参数,let-bound名称,var名称(定义时)和表达式上:

(defn len [x]
  (.length x))
(defn len2 [^String x]
  (.length x))
...
     

一旦将类型提示放在标识符或表达式上,编译器就会尝试在编译时解析对方法的任何调用。此外,编译器将跟踪任何返回值的使用并推断它们的使用等类型,因此需要很少的提示才能获得完全编译时解析的一系列调用。

您还应该查看:

永远不会忘记打开浏览器标签The Clojure CheatSheet

您可能还希望查看this answer