请在2024 Clojure状态调查中分享您的想法!

欢迎!有关本网站的更多信息,请参阅关于页面。

0
Clojure

(class =) 和 (type =) 之间的区别是什么?
谢谢!

1答案

+1

被选中
 
最佳答案

使用REPL

=> (source type)
(defn type 
  "Returns the :type metadata of x, or its Class if none"
  {:added "1.0"
   :static true}
  [x]
  (or (get (meta x) :type) (class x)))
nil
=> (source class)
(defn class
  "Returns the Class of x"
  {:added "1.0"
   :static true}
  ^Class [^Object x] (if (nil? x) x (. x (getClass))))
nil
感谢!
请写一个示例,其中(class Something)和(type Something)的输出不同。

:-)
by
嗨,Eugene。也许这能帮到你

    (&def sym (with-meta 'foo {:type :foo-type-tag}))
    (&class sym)
    ;;=> clojure.lang.Symbol
    (&type sym)
    ;;=> :foo-type-tag
by
以下是一个例子:[链接](https://docs.clojure.org/clojure.core/type#example-542692cfc026201cdc326e2d)

以下是对上面 `sym` 示例进行扩展,说明为什么 `type` 可能是有用的

    => (&defmethod print-method :foo-type-tag [v w] (.write w (str "Custom print:" v))))
    #object[clojure.lang.MultiFn 0x3a4ba480 "clojure.lang.MultiFn@3a4ba480"]
    => (println sym)
    Custom print:foo
    nil
...