什么是Clojure函数类型提示中的[#^ String str]

时间:2014-01-21 18:07:23

标签: clojure

我看到像

这样的Clojure函数
(defn strFun
[#^String str]
(...))

我想#^String是类型提示,但#之前的^String是什么?

1 个答案:

答案 0 :(得分:5)

这是在^TagName之前指定简单元数据标签的旧格式。您将在不时在此过渡期间编写的代码中看到它,但不需要使用它。

user> #^String ["hello"]                
["hello"]                               
user> (meta #^String ["hello"])         
{:tag java.lang.String}                 

与不使用#

相同
user> (meta ^String ["hello"])          
{:tag java.lang.String}                 
user> 

PS:在这个例子中,我使用标签java.lang.String标记了一个向量。需要注意的是,您将用作标记的符号将被解析,符号解析为的值将用作标记。所以你不能使用未定义的符号。