Clojure 案例条款不适用于';不匹配记录类型

Clojure 案例条款不适用于';不匹配记录类型,clojure,switch-statement,record,Clojure,Switch Statement,Record,为什么case子句与记录类型不匹配 (defrecord Rec []) => fargish.user.Rec (def rec (->Rec)) => #'fargish.user/rec (case (type rec) Rec :YES) => IllegalArgumentException No matching clause: class fargish.user.Rec fargish.user/eval25147 (form-init1318567

为什么
case
子句与记录类型不匹配

(defrecord Rec [])
=> fargish.user.Rec

(def rec (->Rec))
=> #'fargish.user/rec

(case (type rec) Rec :YES)
=> IllegalArgumentException No matching clause: class fargish.user.Rec  fargish.user/eval25147 (form-init131856794870899934.clj:1)
如果您想知道,是的,case表达式和test常量相等:

(= (type rec) Rec)
=> true

Rec
不是编译时文本。引述自:

在这种情况下,所有形式的常量表达式都是可以接受的,包括数字、字符串、符号、关键字和它们的(Clojure)组合

备选方案:

(cond 
  (= (type rec) Rec) :YES)
;;=> :YES
(condp = (type rec) 
  Rec :YES)
;;=> :YES

啊,这毕竟是有道理的。多年的C语言让我认为记录是一种结构(编译时的东西)。谢谢你的选择。我想Clojure会有一个简单的方法来实现这一点,而不需要一直定义一个多方法!:)没问题<代码>案例是关于常数的<代码>条件是通用的。直到我读了这些文件,我还以为记录也是一个常数。也许会有另一个答案确切地告诉我们为什么记录不是常数。还有另一个选项是
(instance?Rec Rec)