标签: multiple-dispatch

调用重载的方法,其中所有参数都实现相同的接口

我的出发点如下:
- 我有一个方法,转换,我重载,根据传入的参数类型不同(参见transform(A a1,A a2)和transform(A a1,B b))在下面的例子中)
- 所有这些参数都实现了相同的接口X.

我想在所有实现X接口的各种对象上应用该转换方法.

我想到的是实现变换(X x1,X x2),它在应用变换的相关变量之前检查每个对象的实例.

虽然它有效但代码看起来很难看,我也担心评估这些各种instanceof和cast的性能开销.这是我用Java做的最好的转换,还是有更优雅和/或更有效的方法来实现相同的行为?

以下是印刷BA的一个简单的工作示例.我正在寻找有关如何改进该代码的示例.在我的真实代码中,我自然有更多的'transform'实现,而且没有一个像下面那样简单.

public class A implements X {
}

public class B implements X {
}

interface X {
}

public A transform(A a1, A a2) {
  System.out.print("A");
  return a2;
}

public A transform(A a1, B b) {
  System.out.print("B");
  return a1;
}

// Isn't there something better than the code below???
public X transform(X x1, X x2) {
  if ((x1 instanceof A) && (x2 instanceof A)) { …
Run Code Online (Sandbox Code Playgroud)

java reflection overloading multiple-dispatch visitor-pattern

1
推荐指数
1
解决办法
185
查看次数

在python中定义"重载"函数

我非常喜欢"魔术方法"的语法或者在Python中调用的任何语法,比如

class foo:
    def __add__(self,other): #It can be called like c = a + b
        pass
Run Code Online (Sandbox Code Playgroud)

电话

c = a + b
Run Code Online (Sandbox Code Playgroud)

然后被翻译成

a.__add__(b)
Run Code Online (Sandbox Code Playgroud)

是否有可能模仿"非魔法"功能的这种行为?在数值计算中,我需要Kronecker产品,并且渴望拥有"kron"功能

kron(a,b) 
Run Code Online (Sandbox Code Playgroud)

实际上是

a.kron(b)?
Run Code Online (Sandbox Code Playgroud)

用例是:我有两个类似的类,比如,矩阵和向量,都有Kronecker产品.我想打电话给他们

a = matrix()
b = matrix()
c = kron(a,b)

a = vector()
b = vector()
c = kron(a,b)
Run Code Online (Sandbox Code Playgroud)

矩阵和向量类在一个.py文件中定义,因此共享公共命名空间.那么,实现上述功能的最佳(Pythonic?)方式是什么?可能的解决方案:

1)有一个kron()函数并进行类型检查

2)具有不同的名称空间

3)?

python multiple-dispatch magic-methods

1
推荐指数
1
解决办法
285
查看次数

多种调度和多种方法

它们是什么,它们之间有什么不同?

许多消息来源,如维基百科,声称他们是同样的事情,但也有人明确表示,相反,像SBI这个问题:

首先:"访问者模式是一种模拟C++中双重调度的方法." 这是,呃,不完全正确.实际上,双调度是多调度的一种形式,这是一种在C++中模拟(缺失)多方法的方法.

oop multiple-dispatch double-dispatch multimethod

0
推荐指数
1
解决办法
393
查看次数

功能在多个调度系统中是否可变?

我是否正确理解在(大多数?某些?)多种调度语言中,每个方法都会在程序执行的某个时间点添加到函数.

我可以得出结论,多个调度作为一个特征强制函数是可变的吗?

是否存在多种调度语言,其中所有方法一起附加到(通用)函数(在加载时?),因此不可能在不同的时间点看到不同状态的函数?

common-lisp multiple-dispatch multimethod dylan julia

0
推荐指数
1
解决办法
236
查看次数