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

rust - 定义两个特征,使得实现它的两组类型的笛卡尔积必须存在一个函数

我想创建两个特征,SaveSourceSaveDestination,这样当某些类型实现这些特征时,函数:

必须为所有a : SaveSourceand实现b : SaveDestination(并且当一个新类型添加到SaveSourceorSaveDestination时,它必须save为所有现有SaveDestination的 s 或SaveSources 实现该功能。

这样的事情甚至可能吗?如果没有,有什么我可以用来代替获得相同结果的吗?

0 投票
7 回答
858 浏览

java - 不使用 instanceof 的重载方法的动态调度(运行时多态性)

我想将Arc和的对象保存Line在一个 ArrayList 中,然后得到两者的交集。问题是我如何才能投射ij它的原始类。我知道这instanceof行得通,但那将是最肮脏的方法。

谢谢你的帮助!

0 投票
1 回答
58 浏览

reflection - 如何检查给定的“方法”对象是否接受 Julia 0.6 中给定的类型的“元组”?

目标是定义一个函数,该函数接受一个方法和一个类型的元组,并返回 true 这些类型是该方法的有效输入。没有功能,method

accepts(meth::Method, types::Tuple)::Bool

这是一个测试集

由于 julia 没有太多的公共反射 API(正如我之前所抱怨的那样),我对可能会破坏每个补丁版本的代码感到满意

这个问题的目的是帮助我了解将InterfaceTesting.jl 的这一部分从 0.5 更新到 0.6需要做什么

使我的旧代码不再工作的事情是为了允许三角调度而引入的更改。所以triangular考试是最难通过的。

0 投票
2 回答
161 浏览

raku - 我可以在没有参数的 Perl 6 multis 之间进行选择吗?

我可以根据一些非参数值选择一个多参数,但我必须至少有一个参数,这样我才能where在其中拼凑:

我似乎记得有人用来在完全不带参数的 multis 中调度的一些技巧。例如,我有一个show-env例程我想四处散播,并且只有在我设置了一些调试条件时才会执行任何操作。我可以像我展示的那样实现它,但这并不是很令人满意,而且这不是我想象的我在其他地方看到的聪明的事情:

我可以用可选的命名参数做类似的事情,但这更不令人满意。

当然,我可以在这个简单的例子中这样做,但这并不好玩:

0 投票
2 回答
337 浏览

polymorphism - 从抽象类型访问字段时,julia 类型不稳定

abstract type在访问(在 julia v0.6 中)的字段时,我有一个关于类型不稳定性的问题 。

假设我有一个类型层次结构,所有这些都共享相同的实例变量。我知道正确访问该字段是类型不稳定且不能保证正确,因为有人总是可以定义一个缺少预期变量的新子类型。但是,即使将成员访问包装在函数中,访问仍然是类型不稳定的,我不知道为什么。

假设我们有一个简单的类型层次结构:

我们不是直接访问a.x,而是将其包装在一个函数屏障中:

请注意,通过此方法进行的访问是类型稳定的,因为它可以推断出的类型aT1

但是,当我getX在编译器无法提前知道变量类型的上下文中使用时,它仍然是类型不稳定的:

请注意,它内联了的主体getX,并将其替换为本质上 tmp.x::Int64。这让我很吃惊,因为我期望getX调度到我们上面看到的相同定义的两个实例之一,因为类型是已知的,所以不需要断言。


我认为如果实际上只为抽象基类型定义,这确实getX是有道理的——不会有任何方法可以按照我想象的方式调度。所以我尝试重新定义,以便它为每个子类型生成一个特定的方法,如下所示:ATgetX

但这实际上是一个相同的定义,并没有改变:

知道我怎样才能让它工作吗?

0 投票
2 回答
226 浏览

performance - Is there a difference between fun(n::Integer) and fun(n::T) where T<:Integer in performance/code generation?

In Julia, I most often see code written like fun(n::T) where T<:Integer, when the function works for all subtypes of Integer. But sometimes, I also see fun(n::Integer), which some guides claim is equivalent to the above, whereas others say it's less efficient because Julia doesn't specialize on the specific subtype unless the subtype T is explicitly referred to.

The latter form is obviously more convenient, and I'd like to be able to use that if possible, but are the two forms equivalent? If not, what are the practicaly differences between them?

0 投票
1 回答
118 浏览

r - S3(在R中)中单个重载运算符的多次调度

在使用 S3 类时,我想重载 R 中的“*”(乘法运算符)。

我看到 * 在系统中已经是通用的,但我想要它“generic2”,即在第二个参数上调度。

用例如下:假设我的类名为“Struct”。我希望能够允许所有这三种情况

但是我发现,如果我允许在第二个参数上进行调度,则(已经存在的)第一个参数上的调度将被覆盖!

有没有办法可以在 S3 中做到这一点?

给我...

如果我使用这个,而不是

然后第一个参数的调度起作用,相反的情况发生了:

所以看起来他们肯定会互相覆盖。

关于两者如何和平和富有成效地共存的任何想法?

0 投票
2 回答
546 浏览

c++ - 优雅地比较 C++ 中的多态树

我有一棵多态对象树。我需要遍历两棵树并比较节点。如果节点具有不同的类型,则它们不相等。考虑这个层次结构:

我知道如何实现这些功能:

我在问我应该如何实现这个功能:

我如何优雅地equalTree使用equalNode访问者模式?

0 投票
2 回答
102 浏览

c++ - 多态二元函数

我有三个形状类,,,,我Circle有功能SquareConvexPolygon

我想要一个多态函数

调用上面特定于形状的方法来填充交点矩阵。

我认为在 c++ 中不可能完全做到这一点,但我可以接受任何其他解决方案,只要我可以在不更改计算交集矩阵的代码的情况下添加新的形状类型。

0 投票
1 回答
1001 浏览

python - 如何将默认参数与multipledispatch一起使用?

我正在使用默认参数重载函数multipledispatch(基于this answer

当我在function()没有将值传递给boolitem/s的情况下调用 a

我明白了

NotImplementedError:找不到函数的签名

完整的堆栈跟踪:

注意:我知道我可以@dispatch一起放下并做类似的事情

但我想知道我是否可以保留当前的结构。

我该如何解决?