- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么 Clojure 中的多方法不能简单地用 cond 表达式代替?
在看了 Ch. 中多方法的简单示例后,我受到启发提出这个问题。 Russ Olsen 的《Getting Clojure》一书中的 5。
用户 Daniel Compton 在回复类似问题 (Performance of multimethod vs cond in Clojure) 时说
Multimethods allow for open extension; others can extend your multimethod dispatching on arbitrary expressions. Cond expressions are closed to extension by others or even your own code.
最佳答案
这里的重点是“允许开放扩展”。任何人都可以添加新的
多方法的分支 - 一个 cond
是硬编码的:新的调度
必须添加到 cond
代码到位。
假设:您有一些小部件,并且想要绘制它们。小部件有
一个 :type
并且您想发送如何 draw
在那种类型上。
大写cond
对于所有小部件你知道将工作。但现在
对于每个新的小部件,您必须触摸您的 cond
源代码并修改它。
这对于例如一个实际的应用程序,不需要
延期。
对多方法做同样的事情,任何人可以实现 draw
他们的
小部件。所以你 编写代码时并不知道所有这些。这使得
它是一种更好(甚至是强制性)的方法,例如图书馆。
现在想象一下,您已决定使用 cond
在图书馆的方法
你在写。现在任何拥有新小部件的人都必须自己编写draw
,先派人参加他们的抽奖事件,然后调用您的draw
.他们也
必须确保他们的 draw
到处都被调用,你的draw
被要求让它工作(这通常是不可能的
一种干净的方式)。
直接在 Clojure 核心中使用多方法的一个流行示例是
print-method
.
这样任何人都可以为他们的类型和游戏实现“序列化”
很好。
其他值得关注的例子是
clojure.test
和 integrant .
关于clojure - 在 Clojure 中使用多方法而不是 cond 有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62057461/
我曾尝试在 clojure 中使用 mini-kanren 的实现。但是一直在努力理解 cond-a cond-u 和 cond-e 之间的区别。我似乎很清楚 cond-e 但对 cond-a 和 c
我有一个基本上可以实现的功能 (cond ( (cond) (cond) ) ) 目前计划对我来说似乎是一门外语。我的问题很简单。仅当嵌套条件也返回 true 时,如何
我是 Java 的新手,正在尝试学习迭代器的概念。我在 Java 教程 Oracle 中遇到过这段代码。我的问题是,if (!cond(it.next())) 中的 cond 代表什么。文档没有指定
我正在阅读一个名为 Panda.js 的游戏引擎。核心中有一个方法检查浏览器是否支持全屏,但我不明白这段代码: if (this.system.canvas.requestFullscreen)
我试图了解这两个可观察量之间的区别。代码中唯一的区别是: /** * Inside rxjs pipe */ if(typeof x === 'number' && x > 3) { retu
这两个表达式生成的结果似乎相同。它们之间有什么区别吗? 最佳答案 如果您的 cond 条件为真,但您的 value 不是,则第一个表达式将转到 default_value,而您的第二个表达式只要 co
我正在通过解析类似 Excel 的公式来生成 sql 请求。 因此,对于给定的公式,我收到以下请求: SELECT IF(COL1='Y', SUM(EXPR),NULL) FROM Table 我没
当我执行 np.where(temp == True) 时,PyCharm 会发出警告 我的完整代码: from numpy import where, array a = array([[0.468
是否有任何隐藏的微妙之处,一个是首选,还是一个只是编写另一个的更短方式? Client = db.Clients.First(c=>c.Name == "Client 1") 和 Client = d
if user.item.purchase.status == True: ...使用 flake8 检查时产生错误: E712 comparison to True should be 'if co
我在行“added_parts = new_part_set[(new_part_set["duplicate"] == False) & (new_part_set["version"] ==
1. 简介 本文将介绍 Go 语言中的 sync.Cond 并发原语,包括 sync.Cond 的基本使用方法、实现原理、使用注意事项以及常见的使用使用场景。能够更好地理解和应用 Co
为了在 MongoDB 中对元素进行分组和计数,我已经筋疲力尽了。有很多帖子,但没有一个是我需要的。 这是一个基于以下内容的示例: styvane answer db.VIEW_HISTORICO.a
我正在尝试创建一个计算 状态 我的 Mongo 查询中的字段(状态:已创建、已收到付款、已发货、已收到、已完成)。 db.orders.aggregate( [ { $project: { st
在 Clojure 中的 cond 语句内格式化大型子句的推荐方法是什么? 例如: (cond (> (large-function large-arg1 l
我遇到过很多情况,如果满足特定条件,则需要“更新”两个(甚至三个)值的向量,否则就不用管。示例: (let [val1 some-value val2 some-other-value
scala 有与scheme 的 cond 等价的东西吗? 最佳答案 我猜您正在寻找match(或者只是if/else if/else)。 关于scala - Scala语言中的scheme cond
我正在构建一个 RNN 模型,其中 init_state 可能来自两种情况之一。 1) 通过 feed_dict 从之前的时间步长输出状态输入的静态 init_state。 2) 变量的一些函数,我称
根据https://golang.org/pkg/sync/#Cond.Wait ,必须将 Wait() 调用包装在 for 循环中,因为在第一次恢复时,据称 c.L 没有被锁定。这与上面的句子“..
我正在尝试通过 rmongodb 中的操作在组中执行求和。我求和的“列”包含 NaN 值,导致我的总和返回 NaN。在通过命令运行组之前,我想使用 $project 用零替换 NaN,但我被卡住了。
我是一名优秀的程序员,十分优秀!