1

我是 Dart 的新手,所以也许我在这里遗漏了一些东西:

这有效:

在我的main(),我有这个:

var a = _someFunction;
var b = _someFunction;
print("${a == b}"); // true. correct!

_someFunction另一个顶级函数在哪里。

这不起作用:(至少不是我所期望的)

鉴于这堂课...

class Dummy {

    void start() {
        var a = _onEvent;
        var b = _onEvent;
        print(a == b); // false. ???????
    }

    void _onEvent() {
    }
}

实例化它main()并调用它的start()方法会导致false. 显然,每当我的代码获得对_onEvent.

这是故意行为吗?

我希望获得对同一实例的同一方法的多个引用每次都会返回相同的对象。也许这是出于某种原因。如果是这样的话; 什么原因?或者这可能是VM的错误/疏忽/限制?

感谢您的任何见解!

4

2 回答 2

1

目前,这种行为似乎是故意的,但自 2012 年 5 月以来存在以下缺陷: https ://code.google.com/p/dart/issues/detail?id=144

于 2013-02-01T23:14:15.657 回答
1

如果我猜的话,我会说设置“var a = _onEvent;” 创建一个绑定方法,它是某种同时包含函数和 this 的对象。您要求将绑定方法规范化。但是,这将需要团队创建它们的地图,这可能会导致对内存泄漏的担忧。

我认为他们制作了“var a = _someFunction;” 尽早工作,因为他们需要静态函数是常量,以便可以将它们分配给 const。这样他们就可以编写如下内容:

常量记录器 = someStaticLoggingFunction;

这是在静态评估之前的日子。

无论如何,我会说比较闭包是否相等是大多数语言的边缘情况。把以上所有的都和一粒盐一起吃。根据我对系统的了解,这只是我最好的猜测。据我所知,语言规范对此没有任何说明。

实际上,现在我已经阅读(https://code.google.com/p/dart/issues/detail?id=144),讨论实际上非常好。我上面写的大致匹配它。

于 2013-02-04T19:22:28.010 回答