dtg*_*dtg 2 functional-programming clojure predicates
我正在尝试测试以下记录类型:
(defrecord FirstOrderState [datum matrix]
State
;; implementation goes here ...
)
Run Code Online (Sandbox Code Playgroud)
我正在尝试根据上述类型进行分支,但没有得到我需要的结果
(def state (->FirstOrderState datum matrix))
(= (type state) composer.algorithm.markov.state.FirstOrderState)
=> false
Run Code Online (Sandbox Code Playgroud)
但是,查看 的类型state确认它应该匹配:
(type state)
=> composer.algorithm.markov.state.FirstOrderState
Run Code Online (Sandbox Code Playgroud)
这似乎应该有效,因为类似的检查结果如下true:
(= (type []) clojure.lang.PersistentVector)
=> true
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?使用下面的 hack 提供了一个解决方案,但不是很优雅:
(= (str (type state)) (str composer.algorithm.markov.state.FirstOrderState))
=> true
Run Code Online (Sandbox Code Playgroud)
我的第一个猜测是,您已经重新加载了包含记录类型定义的命名空间,并且该state命名空间是在其他地方(可能在 REPL 中)定义的,因此composer.algorithm.markov.state.FirstOrderState现在引用了与state创建时所使用的不同的类。
REPL 上的演示:
user=> (defrecord Foo [])
user.Foo
user=> (def foo (->Foo))
#'user/foo
user=> (= (type foo) Foo)
true
user=> (defrecord Foo [])
user.Foo
user=> (= (type foo) Foo)
false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |