我的出发点如下:
- 我有一个方法,转换,我重载,根据传入的参数类型不同(参见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
我非常喜欢"魔术方法"的语法或者在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)?
我是否正确理解在(大多数?某些?)多种调度语言中,每个方法都会在程序执行的某个时间点添加到函数中.
我可以得出结论,多个调度作为一个特征强制函数是可变的吗?
是否存在多种调度语言,其中所有方法一起附加到(通用)函数(在加载时?),因此不可能在不同的时间点看到不同状态的函数?
multimethod ×2
common-lisp ×1
dylan ×1
java ×1
julia ×1
oop ×1
overloading ×1
python ×1
reflection ×1