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

python - 输入提示和@singledispatch:如何以可扩展的方式包含`Union [...]`?

我正在重构一个将各种日期格式(即 ISO 8601 字符串、datetime.datedatetime.datetime等)转换为 Unix 时间戳的函数。

我希望使用新函数@singledispatch而不是类型检查,但我不知道如何保留以前函数的类型提示:

旧功能:使用类型检查

新功能:使用@singledispatch

我已经探索过构建支持的类型,如下所示:

...所以它可以通过未来的@singledispatch 注册进行扩展,但我无法让它工作。

如何以可扩展的方式Union[...]在函数中添加样式类型提示?@singledispatch

0 投票
0 回答
104 浏览

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

我读过一篇好文章

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

让我们使用这个例子:

• 多次调度是否正确:

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

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

感谢您的任何见解

0 投票
1 回答
127 浏览

python - python functools.singledispatch 是否适用于 Generator 类型?

我通过添加生成器类型的注册扩展了https://docs.python.org/3/library/functools.html#functools.singledispatch的示例

虽然它适用于列表,但它似乎不适用于带有错误的生成器

预计singledispatch不适用于生成器吗?

0 投票
0 回答
62 浏览

python - singledispatchmethod 使用它使用的类?

为了实践,我正在尝试为二维向量构建一个类,我想覆盖乘法运算符,以便能够将向量乘以标量,也可以乘以另一个向量(点积)。这种基于单个参数的多态性通常使用 @functools.singledispatchmethod 装饰器来实现。我的问题是,从我在网上找到的内容来看,我无法将我定义为它自己体内的类型的类引用。我希望这样做是为了定义mul函数的变体,并将其注册为接收类型“vector”,这正是我在此正文中定义的类型。有没有一种优雅的方法来做到这一点?

当我运行它时,Python 预计不会识别“向量”。

0 投票
1 回答
55 浏览

r - 基础库中的任何通用函数是否在矩阵上调度?

我在编写一些在矩阵上调度的代码时遇到了一些麻烦。为了帮助我,我想看看基础库中的哪些通用函数在矩阵上调度。有什么办法可以让 R 给我一份清单吗?如果做不到这一点,有人知道该列表的任何成员吗?

0 投票
1 回答
66 浏览

python - 如何重载获取 self 类对象的 __eq__ 函数

我正在尝试使用 singledispatch 重载 Posicion 类中的这个函数并尝试遵循 OOP:

我尝试从 functools 库中应用 singledispatch,但遇到了与以下问题相同的错误:python3: singledispatch in class, how to dispatch self type。因为我正在尝试调度 self 类型。所以我尝试了

但它总是输入,@__eq__.register(_Posicion)如果我删除它总是输入 intdef __eq__(self, other):

对于这个问题的措辞可能不好,我再次道歉,并提前感谢您的帮助。如果还有其他需要补充的信息,请告诉我。

0 投票
1 回答
98 浏览

dynamic - 快速单次分派以在运行时绕过多个分派

当类型推断失败时(::Any@code_warntype打印输出中),我的理解是函数调用是动态调度的。换句话说,在运行时,会检查参数的类型以找到MethodInstance具体参数类型的特化 ( )。需要在运行时而不是编译时执行此操作会导致性能成本。

(编辑:最初,我在类型检查和专业化查找之间说“多次调度找到合适的方法”,但我实际上不知道这部分是否在运行时发生。似乎只有在没有有效的情况下才需要发生存在专业化,需要编译。)

在只需要检查一个参数的具体类型的情况下,是否可以进行更快的动态单次调度,例如在某种专业化查找表中?我只是找不到MethodInstance像函数一样访问和调用 s 的方法。

当谈到改变调度或专业化时,我想到了invokeand @nospecializeinvoke看起来它可能会直接跳到指定的方法,但仍然必须检查多个参数类型和专业化。@nospecialize不会跳过调度过程的任何部分,只会导致不同的专业化。

编辑:一个带有评论的最小示例,希望能描述我在说什么。