Dart成员函数相等规则

问题描述 投票:0回答: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”。这里的相等运算符应该测试函数是否是内存中的同一个对象(看起来它们应该是。)我也尝试使用 identical(foo.someFunc, foo.someFunc),但得到了相同的结果。为什么在这种情况下相等运算符不返回 true?

function dart equality member
2个回答
5
投票

这在飞镖文档中有解释。

基本上,每次使用

foo.someFunc
时都会创建不同的闭包。这就是为什么他们不平等。


5
投票

这里有解释。最重要的部分是:

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

您可以将对象存储在变量中以解决此问题。顶级函数和静态方法如您所愿地工作。

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
© www.soinside.com 2019 - 2024. All rights reserved.