Dart成员函数相等规则

时间:2013-06-01 18:25:56

标签: function dart equality member

我正在尝试测试类的成员函数的相等性。这是一个小样本:

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?

2 个答案:

答案 0 :(得分:4)

function equalityDart: 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