定义Clojure多方法

Ham*_*aya 5 clojure multimethod

我在一个命名空间中有以下内容shapes:

(derive ::rect ::shape)
(derive ::square ::rect)
Run Code Online (Sandbox Code Playgroud)

现在在shapes命名空间中执行以下命令:

(isa? ::square ::shape)
Run Code Online (Sandbox Code Playgroud)

回报true.但是当我在命名空间中执行以下操作时,我实际上为绘图实现了多个方法,

(isa? ::square ::shape)
Run Code Online (Sandbox Code Playgroud)

它返回false.因此,即使我有正确的多方法调度函数,我也会收到一条错误消息"未找到调度函数".

我错过了什么吗?在一个巨大的命名空间中实现所有类型的形状对我来说似乎毫无意义.

Ham*_*aya 3

事实证明, :: 使用当前命名空间,因此为了使用其他命名空间中的类型,您需要使用完全限定名称,例如 :shapes/square。