Pau*_*ham 2 equality function member dart
我正在尝试测试类的成员函数的相等性。这是一个小样本:
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() {
}
}
Run Code Online (Sandbox Code Playgroud)
这将打印“foo.someFunc!= foo.someFunc”。这里的相等运算符应该测试这些函数是否是内存中的同一对象(看起来它们应该是。)我也尝试使用相同的(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() {
}
}
Run Code Online (Sandbox Code Playgroud)
这输出:
foo.someMethod != foo.someMethod 存储方法闭包 == 存储方法闭包 一些函数 == 一些函数 Foo.staticMethod == Foo.staticMethod
| 归档时间: |
|
| 查看次数: |
849 次 |
| 最近记录: |