gpt4 book ai didi

dictionary - 在Dart中传递指向 map 的指针

转载 作者:行者123 更新时间:2023-12-03 03:50:37 27 4
gpt4 key购买 nike

假设我有这个课:

class A {
int a;
int b;
int c;
Map<String,int> _map;

A(this.a,this.b,this.c): _map = {'a':a,'b':b,'c': c};

operator [](String k) => _map[k];
operator []=(String k, int v) {
if(_map.containsKey(k)){
_map[k] = v;
} else {
throw Exception();
}
}

@override
String toString() {
return super.toString() + ' a: $a, b: $b, c: $c, map: ${_map.toString()}';
}
}
我希望能够通过 myObj.amyObj['a'](类似于JavaScript中的方式)访问其属性。读取属性时,我的代码工作正常(因此该解决方案非常适合不可变的类),但是当我尝试设置新值时,却没有得到预期的结果:
void main() {
A a = A(1,2,3);
a['a'] = 4;
a.b = 5;
print(a); // prints: Instance of 'A' a: 1, b: 5, c: 3, map: {a: 4, b: 2, c: 3}
} //expected: Instance of 'A' a: 4, b: 5, c: 3, map: {a: 4, b: 5, c: 3}
现在,我知道错误出在构造函数中,但我不知道如何将对 abc的引用分配给映射,而不是复制它们的值。
是否可以将这些属性的指针传递给 _map,以便我可以通过 myObj.a = xmyObj['a'] = x更新值?

最佳答案

您将需要对a / ["a"]的值有一个真实的认识。使用 map 可能是最简单的。
这意味着a getter和setter应该访问 map 而不是无关字段。
也许像这样:

class A {
Map<String, int> _map;

A(int a, int b, int c): _map = {'a': a,'b': b,'c': c};

int/*?*/ operator [](String k) => _map[k];
operator []=(String k, int v) {
if(_map.containsKey(k)){
_map[k] = v;
} else {
throw UnsupportedError("No variable named $k");
}
}

int get a => _map["a"]/*!*/;
set a(int value) => _map["a"] = value;
int get b => _map["b"]/*!*/;
set b(int value) => _map["b"] = value;
int get c => _map["c"]/*!*/;
set c(int value) => _map["c"] = value;

@override
String toString() {
return super.toString() + ' a: $a, b: $b, c: $c, map: ${_map.toString()}';
}
}

关于dictionary - 在Dart中传递指向 map 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63601098/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com