Clojure 在defn宏中,函数名前以插入符号开头的参数意味着什么?

Clojure 在defn宏中,函数名前以插入符号开头的参数意味着什么?,clojure,metadata,defn,Clojure,Metadata,Defn,在函数定义中: (defn ^boolean = ;;other arities omitted... ([x y] (if (nil? x) (nil? y) (or (identical? x y) ^boolean (-equiv x y)))) 函数定义中的^boolean部分是什么意思?它只是扩展元数据并表示返回的类型,还是有更深的含义?换句话说,它是否比简单地使代码更自我描述更有价值?它是一个类型提示。看 或者你最喜欢的书

在函数定义中:

(defn ^boolean =
  ;;other arities omitted...
  ([x y]
    (if (nil? x)
      (nil? y)
      (or (identical? x y)
        ^boolean (-equiv x y))))

函数定义中的
^boolean
部分是什么意思?它只是扩展元数据并表示返回的类型,还是有更深的含义?换句话说,它是否比简单地使代码更自我描述更有价值?

它是一个类型提示。看

或者你最喜欢的书。请注意:编译器不强制实际类型与类型提示匹配!示例w/o类型提示:

(defn go []
  "banana" )
(println (go))
;=> banana

(defn ^long go []
  "banana" )
(println (go))
;=> Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number,