问题标签 [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.
r - R中的双重调度:S4 vs vctrs库
如果我们想在 R 中实现双重调度方法,我们目前有两个选项可供选择:
- S4 方法
- vctrs 库基于 S3 的双重调度
我特别指算术运算符,例如 + 或 *。
它们在性能方面如何比较?他们的间接费用是否具有可比性?
java - 对 Java 中的单次调度与多次调度感到困惑
我读过一篇好文章
只是对多分派(不是在 Java 中)与单分派(在 Java 中)的概念有点困惑。
让我们使用这个例子:
• 多次调度是否正确:
- 调用该方法的对象的动态类型(因此,与 Java 单调度相同)
- 传递给方法的参数的动态类型(因此,显然与 Java 的单调度不同)
• 因此,单调度和多调度之间的区别是上面的#2,其中单调度使用参数的静态类型而不是动态类型?
感谢您的任何见解
swift - 多次 Dispatch Swift 尝试:泛型参数“T”的参数冲突(“Cat”与“Dog”)
我正在观看有关 Julia 的有关 Multiple Dispatch 的视频,并且很好奇我是否可以在 Swift 中编写类似的东西。我看到 Swift 依赖于 Julia 似乎在运行时确定类型的编译器,但我也发现了一些我对 Swift 不了解的地方。
为什么encounters
当 2 个参数属于同一类型的 Pet 时,下面的函数会起作用,但当一个是 Cat 而另一个是 Dog 时却不行?
例如下面的两个函数起作用
但是这些给出了编译器错误
泛型参数“T”的参数冲突(“Cat”与“Dog”)
python - 如何让 multipledispatch 接受同一类的对象?
我正在使用 multipledispatch 创建一个 Point 类,它具有三个构造函数:一个接受单个整数,一个接受两个整数,一个接受 Point 类型的对象。但是我无法实现第三个构造函数,因为我不知道该给@dispatch
装饰器什么参数,因为该类Point
尚未定义。我目前已经使用object
,但是有什么方法可以使用 Point 本身吗?
这是(部分)我的代码:
julia - 为许多类似功能实现多次调度的有效方法
我正在编写一些软件,其中涉及一个数量的各种函数形式的库。我想利用 Julia 的多重调度,但想知道是否有更有效的方法来实现这个过程。
例如,考虑一个包含以下两个函数的库
我还想实现多个调度方法,可以将这些函数形式应用于值向量或向量数组(矩阵)。我可以这样做
但是由于该函数的所有三个版本都使用相同的内核,并且各种调度的操作在所有函数形式中都是相同的,我想知道是否有更有效的方法来编写它,以便为库(例如thirdfunction
)只涉及显式编写内核函数,而不必为库中的函数形式键入2*n
基本相同的函数。n
python - 从命令行运行的multipledispatch ModuleNotFoundError
从命令行运行locust
( locust.io ) 脚本。
locust
调用main.py
具有以下导入:
Packer.py
有这些进口:
StreamGenerator.py
有:
我曾经pip
安装过multipledispatch
,当我在 PyCharm 中运行时它工作正常,但从命令行我得到以下信息。
这是我到目前为止所尝试的:
- 将目录添加到 PYTHONPATH 环境变量
__init__.py
在每个包中添加空文件
pip install
不过,如果我真的编辑了模块,这一切似乎都是不必要的。
下面的答案使我不再看到错误multipledispatch
。但是,我现在看到缺少模块错误:
为清楚起见,我正在运行locust
调用 Python 代码的代码,如此处所述。[主持人-这个问题变得很长。可以吗?】
python - python方法重载 - 使用kwargs的multipledispatch
我正在使用 python3.8 和multipledispatch库来重载方法签名。
multipledispatch 文档示例建议像这样重载:
但在我的情况下,我想用这样的关键字参数调用 add :
我还想将它与这样的默认值一起使用:
当尝试以这种方式使用它时,调度装饰器会忽略 kwargs 并抛出以下异常:
performance - 与字典查找相比,Julia Val{c}() 似乎很慢
我仍在学习 Julia 的多重分派和值作为类型的方法。实例化 Val{c}() 似乎比字典查找慢 50 倍。在那之后,调度似乎比字典查找快 6 倍。
这些持续时间是预期的吗?是否可以加快 Val{c}() 的实例化?
python - 多方法和多调度之间有什么区别吗?
我想在 Python 中使用重载。我知道这是不可能的设计(Python 是动态类型语言),关于这个主题有相当好的线程。这就是为什么我可以使用多重调度(多方法)之类的东西。我正在考虑最好的解决方案,它可以为任何函数或类方法实现多次分派。是否有任何解决方案本身包含在 Python 中?
在我的情况下,使用 singledispatch(在 3.4 中添加到 Python)是不够的(因为只考虑了第一个参数的类型并且我需要多个)。
我也知道我可以使用关键字参数(即具有单个函数并通过检查所有参数来驱动行为),但是当你有很多参数和组合时它会变得复杂。
到目前为止,我能够找到这两个库(未包含在 Python 标准库中):
- multimethod - 提供一个装饰器,用于向函数添加多个参数调度,可以使用与functools.singledispatch相同的注册样式,与注释一起使用,甚至可以与带注释的谓词一起使用,或者
multimeta
为类提供特殊的命名空间 - multipledispatch - 还为多参数调度提供装饰器,不适用于注释,与以前的库相比对我来说看起来不那么强大
基本用法如下所示:
或者
这个功能看起来很相似。
我主要有两个问题:
- 这些多个调度实现中的一个是否会比另一个带来任何(不利)优势?(例如支持的类型、速度、性能、限制……)它似乎具有可比性,但我不确定这一点,因为后者(multipledispatch)似乎更受欢迎(检查 GitHub 星星)但维护较少(我什至会说不太成熟)。
- 是否有任何其他解决方案(即使包含在 Python 标准库中)?
oop - 模式匹配(Elixir、Haskell 等)是一种有限的谓词调度形式吗?
我非常喜欢函数式编程,我确实知道模式匹配和多重分派,这就是我发现谓词分派的方式,并且一直想知道它是否与模式匹配有关。
我确实读过这个 SO 线程:什么是 Predicate Dispatch,但仍然无法得到关于模式匹配和谓词调度之间关系的答案。我相信模式匹配和谓词调度确实是相似的,如果不是等同的,但想听听一些意见。
考虑这个 Elixir 代码:
看起来函数是在运行时根据输入参数的属性选择的,这正是谓词调度的内容。该when
部分看起来类似于本文中提出的谓词调度方式:http ://web.cs.ucla.edu/~todd/research/oopsla04.pdf
请分享您对此事的知识/意见。