2

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

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?

4

2 回答 2

4

这在Dart: Up and Running的函数相等部分中进行了解释。

基本上,每次使用foo.someFunc. 这就是为什么他们不是平等的。

于 2013-06-01T19:25:21.657 回答
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
存储方法闭包 == 存储方法闭包
someFunction == someFunction
Foo.staticMethod == Foo.staticMethod
于 2013-06-01T19:26:17.307 回答