问题标签 [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.
python - 输入提示和@singledispatch:如何以可扩展的方式包含`Union [...]`?
我正在重构一个将各种日期格式(即 ISO 8601 字符串、datetime.date
、datetime.datetime
等)转换为 Unix 时间戳的函数。
我希望使用新函数@singledispatch
而不是类型检查,但我不知道如何保留以前函数的类型提示:
旧功能:使用类型检查
新功能:使用@singledispatch
我已经探索过构建支持的类型,如下所示:
...所以它可以通过未来的@singledispatch 注册进行扩展,但我无法让它工作。
如何以可扩展的方式Union[...]
在函数中添加样式类型提示?@singledispatch
java - 对 Java 中的单次调度与多次调度感到困惑
我读过一篇好文章
只是对多分派(不是在 Java 中)与单分派(在 Java 中)的概念有点困惑。
让我们使用这个例子:
• 多次调度是否正确:
- 调用该方法的对象的动态类型(因此,与 Java 单调度相同)
- 传递给方法的参数的动态类型(因此,显然与 Java 的单调度不同)
• 因此,单调度和多调度之间的区别是上面的#2,其中单调度使用参数的静态类型而不是动态类型?
感谢您的任何见解
python - python functools.singledispatch 是否适用于 Generator 类型?
我通过添加生成器类型的注册扩展了https://docs.python.org/3/library/functools.html#functools.singledispatch的示例
虽然它适用于列表,但它似乎不适用于带有错误的生成器
预计singledispatch
不适用于生成器吗?
python - singledispatchmethod 使用它使用的类?
为了实践,我正在尝试为二维向量构建一个类,我想覆盖乘法运算符,以便能够将向量乘以标量,也可以乘以另一个向量(点积)。这种基于单个参数的多态性通常使用 @functools.singledispatchmethod 装饰器来实现。我的问题是,从我在网上找到的内容来看,我无法将我定义为它自己体内的类型的类引用。我希望这样做是为了定义mul函数的变体,并将其注册为接收类型“vector”,这正是我在此正文中定义的类型。有没有一种优雅的方法来做到这一点?
当我运行它时,Python 预计不会识别“向量”。
r - 基础库中的任何通用函数是否在矩阵上调度?
我在编写一些在矩阵上调度的代码时遇到了一些麻烦。为了帮助我,我想看看基础库中的哪些通用函数在矩阵上调度。有什么办法可以让 R 给我一份清单吗?如果做不到这一点,有人知道该列表的任何成员吗?
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):
对于这个问题的措辞可能不好,我再次道歉,并提前感谢您的帮助。如果还有其他需要补充的信息,请告诉我。
dynamic - 快速单次分派以在运行时绕过多个分派
当类型推断失败时(::Any
在@code_warntype
打印输出中),我的理解是函数调用是动态调度的。换句话说,在运行时,会检查参数的类型以找到MethodInstance
具体参数类型的特化 ( )。需要在运行时而不是编译时执行此操作会导致性能成本。
(编辑:最初,我在类型检查和专业化查找之间说“多次调度找到合适的方法”,但我实际上不知道这部分是否在运行时发生。似乎只有在没有有效的情况下才需要发生存在专业化,需要编译。)
在只需要检查一个参数的具体类型的情况下,是否可以进行更快的动态单次调度,例如在某种专业化查找表中?我只是找不到MethodInstance
像函数一样访问和调用 s 的方法。
当谈到改变调度或专业化时,我想到了invoke
and @nospecialize
。invoke
看起来它可能会直接跳到指定的方法,但仍然必须检查多个参数类型和专业化。@nospecialize
不会跳过调度过程的任何部分,只会导致不同的专业化。
编辑:一个带有评论的最小示例,希望能描述我在说什么。