问题标签 [multimethod]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
824 浏览

clojure - 如何使用类型提示创建具有可变数量参数的 Clojure 多方法?

我正在尝试使用类型提示来区分两个单参数方法。

例如,add-vertex 包装了一个 Java 方法,该方法可以采用可变数量的 args,所以在这里我试图让 add-vertex 采用零、一个或两个 args...

请注意,有两个单参数函数——每个函数采用不同的类型(id 是 Java Integer,props 是 Java Map)。我是 Clojure 的新手,所以我怀疑我这样做完全错误。

0 投票
3 回答
4985 浏览

clojure - 是否可以在 arity 上重载 Clojure 多方法?

例如,我有一些使用多方法的代码,理想情况下希望重载函数(在本例中为多功能),以便我可以传递更高阶的函数来帮助进行测试。

这是示例:

所以我的 defn 提供了 arity 重载,但我想知道 defmethod 是否支持这样的东西。(我猜你不想为每个 defmethod 声明都这样做。)

这是最合适的(我敢说,惯用的)方法,还是有更好的方法?

0 投票
1 回答
769 浏览

clojure - 遍历向量树

我想遍历代表打嗝数据结构的向量树:

然后我想对向量的关键字进行调度,如果已经为关键字定义了多方法,那么它将返回另一组向量,它将替换原始标签。

例如,上面的结构将转换为:

自定义多方法将接收列表(“hello”“hi”)作为参数。然后它将返回包含按钮的 div。

如何编写一个遍历向量并以表单中的所有其他内容作为参数调度关键字的函数,然后用返回的表单替换当前表单?

0 投票
2 回答
1877 浏览

.net - F# 多态性

关于记录类型,有什么方法可以处理 F# 中的多态性?

举个例子,假设我们有两种地址记录类型,街道地址和邮箱地址。我认为在行为方面可以通过模式匹配来处理它们。但是引用呢,有什么方法可以从其他记录中引用(不是指对象引用)这两种类型

0 投票
1 回答
271 浏览

clojure - 如何在原始类型上调度多方法?

我希望我的程序在原始类型及其包装类之间表现不同,例如:

但它不起作用,虽然我尝试 Integer 和 int 两者

那么,是否可以在原始类型上调度多方法?

======编辑======

我正在将 google guava 包装到 clojure 中。其中有一个原始库,例如布尔值、Dobules、Ints 等。它们有一些共同的方法,所以我想尝试多方法。

0 投票
3 回答
703 浏览

types - 如何强制调度到现有的多方法实现?

如果我为我的类型声明另一个命名空间(我无法更改的库)ns-a 的多方法:

并且在 ns-a 中定义了 X 的现有方法:

调度函数是

如果我的 Y 类型也是 X,我如何在 Y 的实现中分派给 X 的实现?

编辑:我发现了一个黑客:

0 投票
3 回答
315 浏览

clojure - Clojure多方法,如何添加数据?

首先,我是 Clojure 的新手,所以这可能是个愚蠢的问题。

作为一个学习练习,我有一个简单的文本冒险多方法系统工作。我现在想从使用关键字更改为某种形式的“classiness”,它可以保存与“sack”、“sword”等各个实例有关的数据。

defrecord去这里的路吗?

问题:我可以使用 Clojure 的派生来创建我的 defrecord 类类型的层次结构吗?似乎与此类似,但接受的答案是“不,也许使用接口”。

答案真的没有吗?为了使用 Clojure 的多方法,我是否必须将所有数据表示形式编写为 Java 类?

谢谢,

克里斯。

工作代码:

下面,是我迄今为止尝试过的,但我在第一次得到一个错误derive

ClassCastException java.lang.Class cannot be cast to clojure.lang.Named clojure.core/namespace (core.clj:1496).

0 投票
1 回答
5571 浏览

scala - 什么是“多态性点菜”,我如何从中受益?

在他的演讲Simple Made Easy中,Rick Hickey 谈到了“点菜多态”(大约 30:00 进入视频)。在相同的上下文中,他还提到了 Haskell 的类型类和 Clojure 的多方法(和协议)。

由于我对这些概念不是很熟悉,因此我想了解它在尝试实现简单性时的用处。我对Scala中有关此概念的任何示例或展示特别感兴趣。

0 投票
2 回答
116 浏览

generics - 是否可以为同一类型提供多种不同的多方法实现?

如何为单个数据类型创建多方法的多个实现?

这可能不是一个很好的例子,但我希望它能说明这个想法:能够将嵌套向量都视为序列:

和树:

为同一类型创建和使用多个多方法实现的一般方法是什么?

0 投票
3 回答
2965 浏览

clojure - 在 Clojure 中使用自定义方法漂亮地打印记录

在 Clojure 1.5.0 中,如何为我自己的记录类型提供一个自定义的漂亮打印机,用 defrecord 定义。

我还想clojure.pprint/pprint使用我的 cutsom 打印机(现在,a为了说明目的,它应该可以漂亮地打印记录字段中的任何内容)。