问题标签 [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 投票
1 回答
971 浏览

clojure - 在不同命名空间的单独文件中实现多方法

我正在尝试在一个单独的文件中定义一个多方法及其实现。它是这样的:在文件 1 中

在文件 2

在主文件中,当我调用该方法时,我定义了如下内容:

当我这样做时,我得到一个例外说"No method in multimethod 'foo'for dispatch value: hello

我究竟做错了什么?还是不能在单独的文件中定义多方法的实现?

0 投票
2 回答
98 浏览

common-lisp - 停止方法调用 :after

假设我有如下代码设置

现在假设我想将我的宇宙飞船移动到一个站点,但燃料计算导致飞船上的燃料量为负数(即没有足够的燃料用于旅行)。

那么有没有办法让我防止:after限定符被调用而不必发出错误信号?

如果我不停止通话,船将被移动到新位置而不会减去任何燃料,这基本上会破坏游戏。

0 投票
1 回答
390 浏览

clojure - 如何在clojure中设置和获取多方法元数据?

我正在使用多种方法来解析命令行命令及其参数。

当我尝试访问元数据时,对于特定方法,clojure 返回nil

0 投票
0 回答
196 浏览

clojure - 如何在 clojure 中设置和获取多方法文档字符串?

我正在使用多种方法来解析命令行命令及其参数。

当我尝试访问特定方法的文档字符串时,clojure 会引发异常:

是否可以在特定方法上设置文档字符串并稍后在代码中获取它?

0 投票
1 回答
1902 浏览

clojure - 使用跨多个命名空间定义的 Clojure 多方法

虽然下面的例子看起来有点奇怪,但这是因为我试图将我目前遇到的一个相当大的问题简化为一个最小的例子。当它们位于几个抽象层后面并且 defmulti 和相应的 defmethods 在多个命名空间中定义时,我正在努力解决如何调用多方法。我真的觉得我在这里遗漏了一些明显的东西......

假设我有以下场景:

  • 我通过他们自己的专有接口从各种供应商那里购买东西
  • 我想实现一个通用接口来与这些供应商中的每一个交谈
  • 我希望能够从不同的供应商处购买不同的商品

使用 Clojure,实现通用接口的推荐方法是通过协议或多方法。在这种情况下,当我根据供应商的价值进行切换时,我认为处理我在下面描述的情况的最佳方法是通过多种方法(但我可能是错的)。

我的多方法定义看起来像这样,它定义了一个我想用来与每个供应商的 API 对话的通用接口:

对于每个供应商,我可能想要类似的东西:

到目前为止,没有问题

现在到我调用这些抽象方法的代码,我假设它看起来像:

这开始看起来有点……丑陋。每次实现新供应商的 API 时,我都需要将 myapp.suppliers.api 更改为 :require 新供应商的方法并重新编译。

现在我在下一个级别工作,我想从供应商 2 那里购买一个小部件。

这是行不通的,因为 :supplier2 尚未在此命名空间中的任何位置定义。

有没有更优雅的方式来编写这段代码?特别是,在 myapp.core 中,我如何从 :supplier2 购买东西?

0 投票
0 回答
35 浏览

java - 在这个 java 示例中如何使用多方法选择?

所以打印的输出是 2。我不明白这是怎么回事。对象不会j被视为它的编译形式:A?然而,它执行使用类型参数的类B版本,即使在编译和运行时都属于类。为什么会这样?fooAkB

0 投票
5 回答
370 浏览

common-lisp - 函数在多个调度系统中是可变的吗?

我是否正确理解在(大多数?一些?)多种调度语言中,每个方法都会在程序执行的某个时间点添加到函数中。

然后我可以得出结论,作为一个特性的多次调度强制函数是可变的吗?

是否有多种调度语言,其中所有方法都附加到一个(通用)函数(在加载时?),所以不可能在不同的时间点看到不同状态的函数?

0 投票
2 回答
260 浏览

clojure - Java 接口上的 Clojure 多方法调度

假设我有一个返回某个父接口对象的 Java 方法。此函数返回的对象的类没有记录,但是有一个丰富且记录良好的接口层次结构,所有这些都扩展了父接口。例如:

如果我知道(并且对底层对象的稳定性有信心),我可以编写一个多方法来调度该方法返回的各种对象:

但是,由于只有接口是公开的,我宁愿分发这些接口。有没有(好的)方法在接口上进行调度?也许像:

0 投票
1 回答
236 浏览

agent - Anylogic:代理的队列决策

我正在为我的论文研究一个模型,该模型是关于 Anylogic 中游客的景点参观决策。我怎样才能给访客(代理)不同的最长等待时间。因此,如果一个景点的排队时间超过了这个等待时间,游客将不会去其最喜欢的景点,而是去其第二受欢迎的景点。

0 投票
2 回答
475 浏览

raku - Perl 6 对象如何找到可能在父类或角色中的多方法?

考虑这个例子,其中一个子类有一个没有签名的 multi 方法和一个带有 slurpy 参数的方法:

方法查找的结构如何?我正在寻找更多解释它的方法,特别是不抱怨它。

Bar例如,有一个对'sdo-it的调用1。一些理性的人可能会认为它首先会寻找匹配的签名,Bar并且 slurpy 永远不会让任何东西通过它。然而,调用在继承链中找到了正确的 multi。

是否Bar已经知道所有签名?它是搜索还是在编写时所有这些东西都已经解决了?

而且,有没有办法在运行时找出哪个类提供了该方法?也许有一些关于如何的电话?当我有一个我错误地指定并且正在其他地方处理的 multi 时,这将是一个方便的调试工具。