我想用文字初始化 Rust 變數。
Shepmaster 猜測Rust 沒有地圖文字,因為:
事實上,有多種資料結構像映射一樣(例如 BTreeMap 和 HashMap),這使得很難選擇一個。
但是 Rust 說“你可能應該只使用 Vec 或 HashMap”,這意味著如果它們對于大多數用途足夠好,那么在從字串初始化時使用它們通常應該可以正常作業。
示例地圖初始化很笨拙,但列印它會產生類似 JSON 的字串:
{"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)
}
從字串文字(可能使用語法糖來避免參考轉義地獄)或通過加載 JSON 檔案,使用陣列和物件的推薦型別創建 Rust 集合在技術上應該不是不可能的:
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<_, _, _>`
所以:由于 Rust 顯然已經內置了 JSON 轉儲,有沒有人寫過一個 JSON 加載庫?
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/gongcheng/366621.html
