我正在尝试将数据从服务器延迟加载到地图中。
出于这个原因,我想向 Map 添加功能,以便当键不存在时,会进行调用以获取值.
我尝试的是这样的:
class LazyMap extends Map {
// use .length for now. When this works, go use xhr
operator [](key) => LazyMap.putIfAbsent(key, () => key.length);
}
LazyMap test = new LazyMap();
main() {
print(test.containsKey('hallo')); // false
// I prefer to use this terse syntax and not have to use putIfAbsent
// every time I need something from my map
print(test['hello']); // 5
print(test.containsKey('hallo')); // true
}
这会引发一个错误,指出“无法解析隐式超级调用的构造函数映射”,这对我来说很神秘。
这是我第一次尝试扩展任何东西,所以我可能会做一些愚蠢的事情。
任何关于做得更好的建议,或者可能告诉我我正在使用不好的做法,将不胜感激。
我研究过这个答案:如何在 Dart 中扩展列表 https://stackoverflow.com/questions/16247045,但这是关于扩展列表,而不是映射。我寻找过 MapBase 但找不到。
我研究过这个答案:我想将我自己的方法添加到一些 Dart 类中 https://stackoverflow.com/questions/12925019,但这似乎是一个非常古老的答案,没有真正的解决方案。
亲切的问候,
亨德里克·简
你应该看看的另一个答案如何在 Dart 中扩展列表? https://stackoverflow.com/a/18508061/634863;)在这个答案中我指出委托列表 http://google.github.io/quiver-dart/docs/quiver.collection/DelegatingList.html。旁边有委托地图 http://google.github.io/quiver-dart/docs/quiver.collection/DelegatingMap.html.
您可以使用委托地图 http://google.github.io/quiver-dart/docs/quiver.collection/DelegatingMap.html作为超类或作为 mixin 来做你想做的事:
import 'package:quiver/collection.dart';
class LazyMap extends DelegatingMap {
final delegate = {};
operator [](key) => putIfAbsent(key, () => key.length);
}
请注意,您将无法将此与xhr因为xhr是异步的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)