我看到運營商r#""
Rust,但我找不到它做什麼。它派上了用場,用於創建JSON:運營商r#「」鏽#
let var1 = "test1";
let json = r#"{"type": "type1", "type2": var1}"#;
println!("{}", json) // => {"type2": "type1", "type2": var1}
什麼是運營商r#""
的名字,我怎麼做var1
評價?
我看到運營商r#""
Rust,但我找不到它做什麼。它派上了用場,用於創建JSON:運營商r#「」鏽#
let var1 = "test1";
let json = r#"{"type": "type1", "type2": var1}"#;
println!("{}", json) // => {"type2": "type1", "type2": var1}
什麼是運營商r#""
的名字,我怎麼做var1
評價?
我找不到它做什麼
它有字符串和原始字符串做。我認爲這是在this part of the documentation解釋相當不錯,在張貼那裏,你可以看看它的代碼塊:
"foo"; r"foo"; // foo "\"foo\""; r#""foo""#; // "foo" "foo #\"# bar"; r##"foo #"# bar"##; // foo #"# bar "\x52"; "R"; r"R"; // R "\\x52"; r"\x52"; // \x52
它否定了需要逃避字符串中的特殊字符。
r
字符串開頭的字符表示raw string literal。它不是一個運營商,而是一個前綴。
在普通字符串文字中,有些字符需要轉義才能使它們成爲字符串的一部分,例如"
和\
。 "
字符需要轉義,因爲否則它會終止字符串,並且\
需要轉義,因爲它是轉義字符。
在原始字符串文字中,您可以在r
和開頭"
之間插入任意數量的#
符號。要關閉原始字符串文本,您必須先關閉"
,然後再開始時輸入相同數量的#
個字符。使用零個或多個#
個字符,可以將文字\
中的字符放入字符串中(\
個字符沒有任何特殊含義)。使用一個或多個#
字符,可以將文字"
字符放入字符串中。如果字符串中需要#
字符後跟"
的序列,則只需使用相同數量的#
字符加上一個來分隔字符串。例如:r##"foo #"# bar"##
代表字符串foo #"# bar
。文字不會停留在中間的引號中,因爲它後面跟着一個#
,而文字則以兩個#
開頭。
要回答問題的最後部分,沒有辦法獲得一個字符串文字來評估當前範圍中的變量。有些語言如PHP支持這種語言,但不支持Rust。您應該考慮使用format!
宏。請注意,對於JSON,即使在原始字符串文字中,仍然需要將大括號加倍,因爲該字符串是由宏解釋的。
fn main() {
let var1 = "test1";
let json = format!(r#"{{"type": "type1", "type2": {}}}"#, var1);
println!("{}", json) // => {"type2": "type1", "type2": test1}
}
如果您需要生成大量的JSON,請致電there are many crates that will make it easier for you。特別是,使用serde_json
,您可以定義常規的Rust結構或枚舉並將它們自動序列化爲JSON。
#做什麼? – 2014-10-29 05:03:48
這只是一個分隔符,它是原始字符串文字的語法的一部分。 – 2014-10-29 05:58:39