haxe - Haxe 中的 "physically equal"是什么意思?

标签 haxe neko

我一直在玩 Neko Modules,但我认为我得到了一些不一致的行为。

var funcs = 0;
var objs = 0;
for (i in 0...m.globalsCount())
{
    var obj:Dynamic = m.getGlobal(i);

    if (Reflect.compareMethods(obj, init))
        trace("matched");

    if (Reflect.isFunction(obj))
        funcs++;
    else if (Reflect.isObject(obj))
        objs++;
}
trace('Functions: $funcs');
trace('Objects: $objs');

在上面的代码中,我第一次运行的时候,一共得到了4487个函数。如果我删除一个函数,重建并运行,我会得到预期的 4486。

我添加了 compareMethods比较比较objinit ,其中 init是我在 Main 文件中声明的函数,但从不输出跟踪。

我看了一眼 compareMethods 的代码提示函数,我偶然发现了以下术语:if 'f1' and the 'f2' are **physically** equal .

现在,它们都是函数,Haxe 手册中没有任何地方提到物理函数。所以我有一个两部分的问题,真的。

什么是物理功能,我如何实现上述预期的跟踪结果?先感谢您。

最佳答案

根据 haxe 单元测试(和 Reflect 的 js 源)Reflect.compareMethods返回 true仅当您将同一对象的任何方法与其自身进行比较时。

// https://github.com/HaxeFoundation/haxe/blob/ff3d7fe6911ab84c370b1334d537a768a55cca56/tests/unit/src/unit/TestReflect.hx
// 
// t(expr) - expr should be true 
// f(expr) - expr should be false 

function testCompareMethods() {
    var a = new MyClass(0);
    var b = new MyClass(1);
    t( Reflect.compareMethods(a.add,a.add) );
    f( Reflect.compareMethods(a.add,b.add) );
    f( Reflect.compareMethods(a.add,a.get) );
    f( Reflect.compareMethods(a.add,null) );
    f( Reflect.compareMethods(null, a.add) );
    /*
        Comparison between a method and a closure :
        Not widely supported atm to justify officiel support
        var fadd : Dynamic = Reflect.field(a, "add");
        var fget : Dynamic = Reflect.field(a, "get");
        t( Reflect.compareMethods(fadd, fadd) );
        t( Reflect.compareMethods(a.add, fadd) );
        t( Reflect.compareMethods(fadd, a.add) );
        f( Reflect.compareMethods(fadd, fget) );
        f( Reflect.compareMethods(fadd, a.get) );
        f( Reflect.compareMethods(fadd, null) );
    */
}

此外,可能的用例
class Test {
    static function main() {
        var a = new A();
        var i:I = a;
        trace(Reflect.compareMethods(a.test, i.test)); //returns true
    }
}

interface I
{
    function test():Void;
}

class A implements I
{
    public function new() {}
    public function test() {}
}

关于haxe - Haxe 中的 "physically equal"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36098245/

相关文章:

c++ - 参数化下一个池不可能用于池对象的类层次结构?

android - deftrait 在 Neko 中产生 NoSuchMethodException

java - 无法在 Xerces 或 Neko 中的节点上调用 getElementsByTagName?

java - 将 Java 桌面应用程序迁移到 Android 和 iPhone

arrays - 将数组分配给一行多维数组时出错

c++ - NME 在 C++ 和 Neko 目标中更改窗口标题

exception - Neko 服务器、Neko/OpenFL 客户端 : std@socket_read exception

javascript - 预加载器中的 OpenFL 动画总是第一次卡顿

algorithm - 产生异常模式的中点位移二维算法

haxe - 安装 Haxe 3 后如何恢复 haxe 命令