首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用故障多调度功能的问题

使用故障多调度功能的问题
EN

Stack Overflow用户
提问于 2016-09-30 13:14:13
回答 1查看 661关注 0票数 0

我已经用clojure编写了这个多功能。

代码语言:javascript
复制
(defmulti printlmt (fn [s] (> (count s) 10)))
(defmethod printlmt true [s] (println s))
(defmethod printlmt false [s] (println (take 10 s)))

然后我试着按下面的方式执行。

代码语言:javascript
复制
(printlmt "test")

但是,我一直收到以下错误。

代码语言:javascript
复制
IllegalArgumentException No method in multimethod 'printlmt' for dispatch value: 4  clojure.lang.MultiFn.getFn (MultiFn.java:156)

据我理解,匿名函数应该返回一个true值。为什么匿名函数返回4?

如果我单独调用调度函数,如下所示

代码语言:javascript
复制
((fn [s] (> (count s) 0)) "test")

在这种情况下,它返回true

编辑:我正在添加我拥有的终端文本:

代码语言:javascript
复制
startingclojure.core=> (defmulti printlmt (fn [s] (> (count s) 10)))
nil
startingclojure.core=> (defmethod printlmt true [s] (println s))
#object[clojure.lang.MultiFn 0x3315fe88 "clojure.lang.MultiFn@3315fe88"]
startingclojure.core=> (defmethod printlmt false [s] (println (take 10 s)))
#object[clojure.lang.MultiFn 0x3315fe88 "clojure.lang.MultiFn@3315fe88"]
startingclojure.core=> 

startingclojure.core=> (printlmt "test")

IllegalArgumentException No method in multimethod 'printlmt' for dispatch value: 4  clojure.lang.MultiFn.getFn (MultiFn.java:156)
startingclojure.core=> 
EN

Stack Overflow用户

回答已采纳

发布于 2016-10-01 02:31:32

如果不想为重新定义方法重新启动repl,请使用remove-method

https://clojuredocs.org/clojure.core/remove-method

代码语言:javascript
复制
(remove-method printlmt true)

然后重新定义。

编辑

您可以使用

代码语言:javascript
复制
(ns-unmap *ns* 'printlmt)

注意: ns-unmap也需要重新定义所有方法。

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39792430

复制
相关文章

相似问题

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