2
为什么case
子句不匹配记录类型?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表达式和测试常数相等:
(= (type rec) Rec)
=> true
AHHHH,它有一定道理毕竟。许多年的C让我想到一个记录是一个结构(编译时事物)。感谢您的选择。我想Clojure会有一个简单的方法来做到这一点,并不涉及到定义多方法的方法! :) –
没问题。 'case'是关于常量的。 'cond'是通用的。在阅读文档之前,我认为记录也是一个常数。也许另一个答案会出现,告诉我们为什么一个记录不是一个常数。 –
另一种选择是“(实例?录制)”。 –