问题标签 [multiple-dispatch]

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 投票
0 回答
46 浏览

r - R中的双重调度:S4 vs vctrs库

如果我们想在 R 中实现双重调度方法,我们目前有两个选项可供选择:

我特别指算术运算符,例如 + 或 *。

它们在性能方面如何比较?他们的间接费用是否具有可比性?

0 投票
0 回答
104 浏览

java - 对 Java 中的单次调度与多次调度感到困惑

我读过一篇好文章

只是对多分派(不是在 Java 中)与单分派(在 Java 中)的概念有点困惑。

让我们使用这个例子:

• 多次调度是否正确:

  1. 调用该方法的对象的动态类型(因此,与 Java 单调度相同)
  2. 传递给方法的参数的动态类型(因此,显然与 Java 的单调度不同)

• 因此,单调度和多调度之间的区别是上面的#2,其中单调度使用参数的静态类型而不是动态类型?

感谢您的任何见解

0 投票
2 回答
888 浏览

swift - 多次 Dispatch Swift 尝试:泛型参数“T”的参数冲突(“Cat”与“Dog”)

我正在观看有关 Julia 的有关 Multiple Dispatch 的视频,并且很好奇我是否可以在 Swift 中编写类似的东西。我看到 Swift 依赖于 Julia 似乎在运行时确定类型的编译器,但我也发现了一些我对 Swift 不了解的地方。

为什么encounters当 2 个参数属于同一类型的 Pet 时,下面的函数会起作用,但当一个是 Cat 而另一个是 Dog 时却不行?

例如下面的两个函数起作用

但是这些给出了编译器错误

泛型参数“T”的参数冲突(“Cat”与“Dog”)

0 投票
0 回答
182 浏览

python - 如何让 multipledispatch 接受同一类的对象?

我正在使用 multipledispatch 创建一个 Point 类,它具有三个构造函数:一个接受单个整数,一个接受两个整数,一个接受 Point 类型的对象。但是我无法实现第三个构造函数,因为我不知道该给@dispatch装饰器什么参数,因为该类Point尚未定义。我目前已经使用object,但是有什么方法可以使用 Point 本身吗?

这是(部分)我的代码:

0 投票
2 回答
100 浏览

julia - 为许多类似功能实现多次调度的有效方法

我正在编写一些软件,其中涉及一个数量的各种函数形式的库。我想利用 Julia 的多重调度,但想知道是否有更有效的方法来实现这个过程。

例如,考虑一个包含以下两个函数的库

我还想实现多个调度方法,可以将这些函数形式应用于值向量或向量数组(矩阵)。我可以这样做

但是由于该函数的所有三个版本都使用相同的内核,并且各种调度的操作在所有函数形式中都是相同的,我想知道是否有更有效的方法来编写它,以便为库(例如thirdfunction)只涉及显式编写内核函数,而不必为库中的函数形式键入2*n基本相同的函数。n

0 投票
1 回答
479 浏览

python - 从命令行运行的multipledispatch ModuleNotFoundError

从命令行运行locust( locust.io ) 脚本。

locust调用main.py具有以下导入:

Packer.py有这些进口:

StreamGenerator.py有:

我曾经pip安装过multipledispatch,当我在 PyCharm 中运行时它工作正常,但从命令行我得到以下信息。

这是我到目前为止所尝试的:

  1. 将目录添加到 PYTHONPATH 环境变量
  2. __init__.py在每个包中添加空文件

pip install不过,如果我真的编辑了模块,这一切似乎都是不必要的。


下面的答案使我不再看到错误multipledispatch。但是,我现在看到缺少模块错误:

为清楚起见,我正在运行locust调用 Python 代码的代码,如此处所述。[主持人-这个问题变得很长。可以吗?】

在此处输入图像描述

在此处输入图像描述

0 投票
1 回答
583 浏览

python - python方法重载 - 使用kwargs的multipledispatch

我正在使用 python3.8 和multipledispatch库来重载方法签名。

multipledispatch 文档示例建议像这样重载:

但在我的情况下,我想用这样的关键字参数调用 add :

我还想将它与这样的默认值一起使用:

当尝试以这种方式使用它时,调度装饰器会忽略 kwargs 并抛出以下异常:

0 投票
1 回答
115 浏览

performance - 与字典查找相比,Julia Val{c}() 似乎很慢

我仍在学习 Julia 的多重分派和值作为类型的方法。实例化 Val{c}() 似乎比字典查找慢 50 倍。在那之后,调度似乎比字典查找快 6 倍。

这些持续时间是预期的吗?是否可以加快 Val{c}() 的实例化?

0 投票
1 回答
670 浏览

python - 多方法和多调度之间有什么区别吗?

我想在 Python 中使用重载。我知道这是不可能的设计(Python 是动态类型语言),关于这个主题有相当好的线程。这就是为什么我可以使用多重调度(多方法)之类的东西。我正在考虑最好的解决方案,它可以为任何函数或类方法实现多次分派。是否有任何解决方案本身包含在 Python 中?

在我的情况下,使用 singledispatch(在 3.4 中添加到 Python)是不够的(因为只考虑了第一个参数的类型并且我需要多个)。

我也知道我可以使用关键字参数(即具有单个函数并通过检查所有参数来驱动行为),但是当你有很多参数和组合时它会变得复杂。

到目前为止,我能够找到这两个库(未包含在 Python 标准库中):

基本用法如下所示:

或者

这个功能看起来很相似。

我主要有两个问题:

  • 这些多个调度实现中的一个是否会比另一个带来任何(不利)优势?(例如支持的类型、速度、性能、限制……)它似乎具有可比性,但我不确定这一点,因为后者(multipledispatch)似乎更受欢迎(检查 GitHub 星星)但维护较少(我什至会说不太成熟)。
  • 是否有任何其他解决方案(即使包含在 Python 标准库中)?
0 投票
1 回答
176 浏览

oop - 模式匹配(Elixir、Haskell 等)是一种有限的谓词调度形式吗?

我非常喜欢函数式编程,我确实知道模式匹配和多重分派,这就是我发现谓词分派的方式,并且一直想知道它是否与模式匹配有关。

我确实读过这个 SO 线程:什么是 Predicate Dispatch,但仍然无法得到关于模式匹配和谓词调度之间关系的答案。我相信模式匹配和谓词调度确实是相似的,如果不是等同的,但想听听一些意见。

考虑这个 Elixir 代码:

看起来函数是在运行时根据输入参数的属性选择的,这正是谓词调度的内容。该when部分看起来类似于本文中提出的谓词调度方式:http ://web.cs.ucla.edu/~todd/research/oopsla04.pdf

请分享您对此事的知识/意见。