我正在尝试测试一个类的成员函数是否相等。这是一个小样本:
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?
每次创建闭包时,该闭包都是一个新对象。
您可以将对象存储在变量中以解决此问题。顶级函数和静态方法如您所愿地工作。
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 一些函数 == 一些函数 Foo.staticMethod == Foo.staticMethod