在 C++ 中,索引运算符是为 std::map
和 std::unordered_map
定义的,因此如果您对容器的引用是非常量的,那么没有分配的索引足以在容器内隐式创建一个值。这有时会产生细微的错误,您希望在容器中引用一个值,但实际上却创建了一个,例如config["stting"]
而不是 config["setting"]
。
我知道 Python 通过将 __setitem__
和 __getitem__
作为单独的方法来解决这个问题,但这需要与解析器合作。
Rust 是否采取了措施来解决这种常见的错误来源?
最佳答案
No Rust 没有这个问题。 Rust 集合中没有隐式创建项。
例如,您要将键值对插入到 std::collections::HashMap
与 map.insert(key, value)
并使用 let value = map.get(key);
检索值.
请注意 .get()
将返回 Option<&V>
,所以如果 key 不存在,你将得到 None
结果。
Rust 还提供了一种简单的方法来检索值或在值不存在时为给定键插入一些默认值:
let value = map.entry(key).or_insert(0);
HashMap
还有implements the Index
trait ,它允许使用 let value = map[key];
检索值,如果 key
将会 panic map
中不存在.
请注意,因为 HashMap
不执行 IndexMut
, 这个[ ]
方括号语法始终返回对值的不可变引用,因此您不能以这种方式插入或修改值。
关于c++ - Rust 是否像 C++ 一样在索引时隐式创建映射条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57151374/