可选的类代码生成依赖于haxe中泛型实现的函数

时间:2017-11-23 23:08:25

标签: metaprogramming haxe

假设我在Haxe中有以下课程:

resources

我想知道是否有可能编写一个将hashCode函数添加到pair类的宏,当且仅当泛型U和V都实现了hashCode函数时...才能将两个类组合起来通过元编程进入单一的。

1 个答案:

答案 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