首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当两个缺陷都存在于不同的文件中时,如何将它们组合成一个新的防御类型?

当两个缺陷都存在于不同的文件中时,如何将它们组合成一个新的防御类型?
EN

Stack Overflow用户
提问于 2016-05-31 17:35:54
回答 1查看 61关注 0票数 3

以下是本文中的工作:

代码语言:javascript
复制
(defprotocol MyProtocol
  (foo [this]))
(deftype A []
  MyProtocol
  (foo [this] "a"))
(deftype B []
  MyProtocol
  (foo [this] "b"))
(deftype C []
  MyProtocol
  (foo [this] (str (foo (A.)) (foo (B.)))))

当我试图将每个实例移动到一个单独的文件以减少耦合时,我会在C上得到以下错误:“无法在此上下文中解析符号: foo”

样本布局:

代码语言:javascript
复制
;; my_protocol.clj
(ns my-protocol)
(defprotocol MyProtocol
  (foo [this]))

;; type_a.clj
(ns type-a
  (:require my-protocol :refer [MyProtocol])
(deftype A []
  MyProtocol
  (foo [this] "a"))

;; type_b.clj
(ns type-b
  (:require my-protocol :refer [MyProtocol])
(deftype B []
  MyProtocol
  (foo [this] "b"))

;; type_c.clj
(ns type-c
  (:import [type_a A]
           [type_b B])
  (:require my-protocol :refer [MyProtocol])
(deftype C []
  MyProtocol
  (foo [this] (str (foo (A.)) (foo (B.)))))    
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-31 17:57:17

代码语言:javascript
复制
(ns type-a
  (:require my-protocol :refer [MyProtocol])

您引用了协议,但从未引用过foo,因此当您试图调用foo时,编译器不知道您的意思。相反,写:

代码语言:javascript
复制
(ns type-a
  (:require my-protocol :refer [MyProtocol foo])
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37552231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档