我正在尝试测试类的成员函数的相等性。这是一个小样本:
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”。这里的相等运算符应该测试函数是否是内存中的相同对象(看起来它们应该是。)我也尝试使用相同的(foo.someFunc,foo.someFunc),但得到了相同的结果。为什么在这种情况下,相等运算符不返回true?
答案 0 :(得分:4)
function equality的Dart: Up and Running部分对此进行了解释。
基本上,每次使用foo.someFunc
时都会创建一个不同的闭包。这就是为什么他们不等于。
答案 1 :(得分:4)
这解释为here。最重要的部分是:
每次创建闭包时,该闭包都是一个新对象。
您可以将对象存储在变量中以解决此问题。顶级函数和静态方法可以按预期工作。
void main() {
var foo = new Foo();
if (foo.someMethod == foo.someMethod)
print("foo.someMethod == foo.someMethod");
else
print("foo.someMethod != foo.someMethod");
var storedMethodClosure = foo.someMethod;
if (storedMethodClosure == storedMethodClosure)
print("storedMethodClosure == storedMethodClosure");
else
print("storedMethodClosure != storedMethodClosure");
if (someFunction == someFunction)
print("someFunction == someFunction");
else
print("someFunction != someFunction");
if (Foo.staticMethod == Foo.staticMethod)
print("Foo.staticMethod == Foo.staticMethod");
else
print("Foo.staticMethod != Foo.staticMethod");
}
void someFunction() {
}
class Foo {
someMethod() {
}
static staticMethod() {
}
}
输出:
foo.someMethod != foo.someMethod storedMethodClosure == storedMethodClosure someFunction == someFunction Foo.staticMethod == Foo.staticMethod