27

Dart は == と === をサポートしていますか? 平等とアイデンティティの違いは何ですか?

4

4 に答える 4

53

Dart は==平等とidentical(a, b)アイデンティティをサポートします。===Dart は構文をサポートしなくなりました。

==オブジェクトが「等しい」かどうかを確認する場合は、等しいかどうかを確認するために使用します。クラスにメソッドを実装して、==等価の意味を定義できます。例えば:

class Person {
  String ssn;
  String name;

  Person(this.ssn, this.name);

  // Define that two persons are equal if their SSNs are equal
  bool operator ==(other) {
    return (other is Person && other.ssn == ssn);
  }
}

main() {
  var bob =  Person('111', 'Bob');
  var robert =  Person('111', 'Robert');

  print(bob == robert); // true

  print(identical(bob, robert)); // false, because these are two different instances
}

のセマンティクスは次のa == bとおりであることに注意してください。

  • aまたはのいずれかである場合bnull、戻りますidentical(a, b)
  • それ以外の場合は、戻るa.==(b)

identical(a, b)2 つの変数が同じインスタンスを参照しているかどうかを確認するために使用します。同一は、 にあるトップレベルの関数dart:coreです。

于 2012-11-07T18:03:35.023 に答える
4

DART は === が存在する JavaScript に関連していると言われているため、すぐに反対票を投じられないようにしたいと思います。

概念としての同一性とは、1 が 1 に等しいことを意味しますが、 1.0は 1 に等しくなく、false も 0 にも等しくなく、"2" も 2 に等しくはなりません。

于 2012-11-07T18:10:38.290 に答える
3

identicalDart ではJavascript と同様に機能する(5.0 == 5)ことtrueに注意してidentical(5.0, 5)くださいfalse

于 2012-11-07T19:03:04.520 に答える