假设我在Haxe中有以下课程:
resources
我想知道是否有可能编写一个将hashCode函数添加到pair类的宏,当且仅当泛型U和V都实现了hashCode函数时...才能将两个类组合起来通过元编程进入单一的。
答案 0 :(得分:3)
只需切换到abstract:
即可实现所需的行为typedef Hashable = { function hashCode():Int; };
abstract HashablePair<U:Hashable,V:Hashable>(Pair<U,V>)from Pair<U,V> {
public function new(u:U, v:V)
this = new Pair(u, v);
public function hashCode():Int { // just a sample way ...
var h1:Int = (this.first == null) ? 0 : this.first.hashCode();
var h2:Int = (this.second == null) ? 0 : this.second.hashCode();
return 3 * h1 + 5 * h2;
}
}
只要from Pair<U,V>
和Pair<U,V>
上的必要约束得到尊重,HashablePair<U,V>
就可以U
转换为V
。
如需完整示例,请查看Try Haxe #d76E1。