我正在测试一个类的成员函数是否相等。下面是一个小示例:
void main() {
var foo = new Foo();
if (foo.someFunc == foo.someFunc)
print("foo.someFunc == foo.someFunc");
else
print("foo.someFunc != foo.someFunc");
}
class Foo {
someFunc() {
}
}
这将打印“foo.someFunc!= foo.someFunc”。这里的相等运算符应该是测试函数在内存中是否是同一个对象(看起来它们应该是)。我也尝试使用identical(foo.someFunc,foo.someFunc),但得到了相同的结果。为什么在这种情况下相等运算符不返回true?
2条答案
按热度按时间wfauudbj1#
这在dart文档中有解释。
基本上,每次使用
foo.someFunc
都创建了一个不同的闭包,这就是它们不相等的原因。zaq34kh62#
这是解释这里.最重要的部分是这样的:
每次创建闭包时,该闭包都是一个新对象。
你可以将对象存储在一个变量中来解决这个问题。顶级函数和静态方法如你所愿。
这将输出: