我想用文字初始化 Rust 變數。
Shepmaster 猜測Rust 沒有地圖文字,因為:
事實上,有多種資料結構像映射一樣(例如 BTreeMap 和 HashMap),這使得很難選擇一個。
但是 Rust 說“你可能應該只使用 Vec 或 HashMap”,這意味著如果它們對于大多數目的足夠好,那么在從文字值初始化時使用它們通常應該可以正常作業。
示例地圖初始化很笨拙,但列印它會產生更簡潔的表示:
{"Mars": 1.5, "Mercury": 0.4, "Earth": 1.0, "Venus": 0.7}.
fn main() {
use std::collections::HashMap;
let solar_distance = HashMap::from([
("Mercury", 0.4),
("Venus", 0.7),
("Earth", 1.0),
("Mars", 1.5),
]);
println!("{:?}", solar_distance)
}
在 Python 中x = {"Mars": 1.5, "Mercury": 0.4, "Earth": 1.0, "Venus": 0.7}會初始化一個 dict 變數。如果 Rust 的未來版本能夠接受嵌套串列和映射文字來初始化相應的默認 Vec 和 HashMap 結構,那就太好了。
Rust 功能路線圖上是否有簡潔的嵌套文字格式?
第二個最佳解決方案是從 JSON 字串初始化結構(也許使用一些語法糖來避免參考轉義地獄):
fn main() {
use std::collections::HashMap;
let x = String::from("{'Venus': 0.7, 'Mars': 1.5, 'Mercury': 0.4, 'Earth': 1.0}");
println!("{:?}", x);
let solar_distance = HashMap::from(x);
println!("{:?}", solar_distance);
}
但這失敗了:
|
7 | let solar_distance = HashMap::from(x);
| ^^^^^^^^^^^^^ the trait `From<String>` is not implemented for `HashMap<_, _, _>`
有沒有人寫過從 JSON 字串初始化嵌套的 vec/hash 變數的方法?
uj5u.com熱心網友回復:
如果您希望能夠HashMap簡潔地初始化(類似于vec![]),請查看https://crates.io/crates/hmap。它基本上完全符合您的描述。
如果要使用serde_json,可以使用該json!()庫提供的宏:
let x = json!({
"foo": "bar",
"baz": [1, 2, 3],
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/367037.html
