在defn宏中,在函数名称之前以插入符号开头的参数是什么意思?

时间:2015-09-20 19:55:47

标签: clojure metadata defn

在函数定义中:

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

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

1 个答案:

答案 0 :(得分:2)

这是一种类型提示。见

https://www.safaribooksonline.com/library/view/clojure-programming/9781449310387/ch09s05.html

http://clojure-doc.org/articles/language/functions.html

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

(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,