Dart成员函数相等规则

fumotvh3  于 2023-03-27  发布在  其他
关注(0)|答案(2)|浏览(111)

我正在测试一个类的成员函数是否相等。下面是一个小示例:

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?

wfauudbj

wfauudbj1#

这在dart文档中有解释。
基本上,每次使用foo.someFunc都创建了一个不同的闭包,这就是它们不相等的原因。

zaq34kh6

zaq34kh62#

这是解释这里.最重要的部分是这样的:
每次创建闭包时,该闭包都是一个新对象。
你可以将对象存储在一个变量中来解决这个问题。顶级函数和静态方法如你所愿。

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

相关问题