Function Dart成员函数相等规则

Function Dart成员函数相等规则,function,dart,equality,member,Function,Dart,Equality,Member,我试图测试一个类的成员函数是否相等。以下是一个小样本: void main(){ var foo=new foo(); 如果(foo.someFunc==foo.someFunc) 打印(“foo.someFunc==foo.someFunc”); 其他的 打印(“foo.someFunc!=foo.someFunc”); } 福班{ someFunc(){ } } 这将打印“foo.someFunc!=foo.someFunc”。这里的相等运算符应该测试函数是否是内存中的同一对象(看

我试图测试一个类的成员函数是否相等。以下是一个小样本:

void main(){
var foo=new foo();
如果(foo.someFunc==foo.someFunc)
打印(“foo.someFunc==foo.someFunc”);
其他的
打印(“foo.someFunc!=foo.someFunc”);
}    
福班{
someFunc(){
}
}
这将打印“foo.someFunc!=foo.someFunc”。这里的相等运算符应该测试函数是否是内存中的同一对象(看起来应该是)。我也尝试使用相同的(foo.someFunc,foo.someFunc),但得到了相同的结果。在这种情况下,为什么相等运算符不返回true?

这将在的部分中解释

基本上,每次使用
foo.someFunc
时都会创建不同的闭包。这就是他们不平等的原因。

这是可以解释的。最重要的部分是:

每次创建闭包时,该闭包都是一个新对象

您可以将对象存储在一个变量中来解决这个问题。顶级函数和静态方法按预期工作

void main(){
var foo=new foo();
if(foo.someMethod==foo.someMethod)
打印(“foo.someMethod==foo.someMethod”);
其他的
打印(“foo.someMethod!=foo.someMethod”);
var storedMethodClosure=foo.someMethod;
如果(storedMethodClosure==storedMethodClosure)
打印(“storedMethodClosure==storedMethodClosure”);
其他的
打印(“storedMethodClosure!=storedMethodClosure”);
if(someFunction==someFunction)
打印(“someFunction==someFunction”);
其他的
打印(“someFunction!=someFunction”);
if(Foo.staticMethod==Foo.staticMethod)
打印(“Foo.staticMethod==Foo.staticMethod”);
其他的
打印(“Foo.staticMethod!=Foo.staticMethod”);
}
void函数(){
}
福班{
someMethod(){
}
静态方法(){
}
}
这将产生:

foo.someMethod != foo.someMethod storedMethodClosure == storedMethodClosure someFunction == someFunction Foo.staticMethod == Foo.staticMethod foo.someMethod!=foo.someMethod storedMethodClosure==storedMethodClosure someFunction==someFunction Foo.staticMethod==Foo.staticMethod
+1用于链接到同一文档并击败我。;)非常感谢。理解引用是一个闭包是有意义的。在我正在处理的特定案例中,我只需要知道闭包引用的是同一个函数。因此,我最终使用foo.someFunc.toString()而不是==来进行比较,这样我就不必保存对闭包的引用以便稍后进行比较。感谢您的快速响应。这正是我需要知道的。