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'是通用的。在閱讀文檔之前,我認爲記錄也是一個常數。也許另一個答案會出現,告訴我們爲什麼一個記錄不是一個常數。 –
另一種選擇是「(實例?錄製)」。 –