【问题标题】:Where is the definition of `map.clear()`?`map.clear()` 的定义在哪里?
【发布时间】:2022-01-13 15:04:00
【问题描述】:

我正在检查Map 的实现。 (dart:collection中的map.dart)

我在abstract class Map<K, V> 中找到void clear();clear() 没有任何实现,class Map 没有扩展/实现任何其他类。但我仍然可以拨打clear()

例子

Map<int, int> m = <int, int>{1: 1, 2: 2};
m.clear();

在哪里可以找到clear()的实现?

【问题讨论】:

  • 你能检查一下它扩展/实现了什么吗?此外,当您尝试在 IDE 中转到定义时,它会将您带到哪里?
  • clear()操作后map会为空{}

标签: flutter dictionary dart


【解决方案1】:

我的回答是基于您希望在 Dart 本地运行而不是在 Web 上运行时使用的实现。

Dart 中默认的MapLinkedHashMap。在实现clear() 之前有好几层,但我希望这是您正在寻找的那一层:

  void clear() {
    if (!isEmpty) {
      _index = _uninitializedIndex;
      _hashMask = _HashBase._UNINITIALIZED_HASH_MASK;
      _data = _uninitializedData;
      _usedData = 0;
      _deletedKeys = 0;
    }
  }

https://github.com/dart-lang/sdk/blob/2.15.1/sdk/lib/_internal/vm/lib/compact_hash.dart#L333-L341

【讨论】:

    【解决方案2】:

    {} 表示法创建了一个LinkedHashMap,您可以在其中找到实现。见:

    import 'dart:collection';
    
    void main () {
    
      Map<int, int> m = <int, int>{1: 1, 2: 2};
      if(m is LinkedHashMap) {
        print("It's a LinkedHashMap!");
      }
    }
    

    输出:

    It's a LinkedHashMap!
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-09
    • 2015-04-05
    • 1970-01-01
    • 2016-03-22
    • 2016-02-19
    • 2016-12-31
    • 2011-10-08
    相关资源
    最近更新 更多