在extend-type中使用其他协议方法

时间:2014-05-02 04:50:22

标签: clojure

我正在使用Piccolo2D构建图形编辑器,并希望实现LoomGraph协议。但是我遇到了问题

Unable to resolve symbol: out-edges in this context

真正令人困惑的是我可以在successors中使用has-edge

(extend-type PCanvas
  Graph
  (nodes [g]
    (->children (->node-layer g)))

  (edges [g]
    (->children (->edge-layer g)))

  (has-node? [g node]
    (some #{node} (nodes g)))

  (has-edge? [g n1 n2]
    (some #{n2} (successors g n1)))

  (successors
    ([g] (partial successors g))
    ([g node]
       (remove (partial = node)
               (distinct (flatten (apply concat 
                                         (map ->nodes (out-edges g node))))))))

  (out-degree [g node]
    (count (out-edges g node)))

  (out-edges [g node]
    (->edges node)))

那么协议方法在什么条件下可以调用其他方法?

修改:完整的错误消息:http://pastebin.com/NDWEZZ7y

2 个答案:

答案 0 :(得分:2)

我发布了Loom版本0.5.0,其中包括多图支持。

答案 1 :(得分:1)

当前版本中没有这样的方法,0.4.2,这是4个月大,见https://github.com/aysylu/loom/blob/0.4.2/src/loom/graph.clj#L13。您可能正在查看GitHub中的主分支changes made 23 days ago,尚未发布。