アレッ*_*ックス 47 string syntax rust
我r#""在Rust 看到了操作员,但我找不到它的功能.它为创建JSON派上了用场:
let var1 = "test1";
let json = r#"{"type": "type1", "type2": var1}"#;
println!("{}", json) // => {"type2": "type1", "type2": var1}
Run Code Online (Sandbox Code Playgroud)
操作员的名字是r#""什么?我该如何var1评价?
Tim*_*Tim 48
我找不到它的作用
它与字符串文字和原始字符串有关.我认为在文档的这一部分中已经很好地解释了,在那里发布的代码块中你可以看到它的作用:
Run Code Online (Sandbox Code Playgroud)"foo"; r"foo"; // foo "\"foo\""; r#""foo""#; // "foo" "foo #\"# bar"; r##"foo #"# bar"##; // foo #"# bar "\x52"; "R"; r"R"; // R "\\x52"; r"\x52"; // \x52
它无需转义字符串中的特殊字符.
Fra*_*gné 48
将r在一个字符串的开始字符表示原始字符串字面量.它不是运营商,而是前缀.
在普通的字符串文字中,有一些字符需要转义才能使它们成为字符串的一部分,例如"和\.该"角色需要进行转义,因为否则会终止该字符串,并且\需要进行转义,因为它是转义字符.
在原始字符串文字中,您可以在开头和开头#之间放置任意数量的符号.要关闭原始字符串文字,您必须有一个结束,然后是与开始时相同的字符数.如果是零个或多个字符,则可以在字符串中放入文字字符(字符没有任何特殊含义).使用一个或多个字符,您可以在字符串中放入文字字符.如果在字符串中需要后跟一系列字符,只需使用相同数量的字符加上一个字符串即可.例如:表示字符串.文字不会停留在中间的引号,因为它只跟着一个,而文字以两个开头.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}
}
Run Code Online (Sandbox Code Playgroud)
如果你需要生成大量的JSON,那么有很多箱子可以让你更轻松.特别是,serde_json您可以定义常规的Rust结构或枚举,并将它们自动序列化为JSON.
我第一次看到这个奇怪的符号是在 glium 教程(用于图形管理的旧板条箱)中,用于“封装”并将 GLSL 代码(GL 着色语言)传递给 GPU 的着色器
https://github.com/glium/glium/blob/master/book/tuto-02-triangle.md
据我了解,看起来 r#...# 的内容保持不变,没有以任何方式解释。因此原始字符串。
| 归档时间: |
|
| 查看次数: |
14892 次 |
| 最近记录: |