4

我在 cljc 文件中有一些代码可以编译为 Clojure 和 ClojureScript。

在protocols.cljc

(defprotocol Transformable ".." 
    (scale [this scalar] "" ) ...)

在模式.cljc

(defrecord APattern [paths]
    Transformable
      (scale [this s] (...)) ...)

在另一个.cljc

(defn f [pattern] (.scale pattern (/ 1 2)) )

在 core.cljs 中

(another/f pattern)

但是,我在浏览器控制台上遇到错误

TypeError: pattern.scale is not a function

检查 core.cljs 中模式对象的字段(使用 js-keys)显示该对象有一个名为

"patterning$protocols$Transformable$scale$arity$2"

这看起来像我的功能。那么我只是在 ClojureScript 中访问它时做错了吗?做 。符号不起作用?我需要做其他事情吗?

4

1 回答 1

2

对协议函数的调用就像对任何其他函数的调用一样。所以你的f函数应该是这样的:

(require 'protocols)
(defn f [pattern] (protocols/scale pattern (/ 1 2)) )
于 2016-01-27T13:11:44.633 回答