首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rust中的r#""#运算符是什么?

Rust中的r#""#运算符是什么?
EN

Stack Overflow用户
提问于 2014-10-28 23:04:36
回答 2查看 30.5K关注 0票数 83

我在Rust中看到了操作符r#"",但我找不到它是做什么的。它在创建JSON时派上了用场:

代码语言:javascript
复制
let var1 = "test1";
let json = r#"{"type": "type1", "type2": var1}"#;
println!("{}", json) // => {"type2": "type1", "type2": var1}

运算符r#""的名称是什么?如何让var1求值?

EN

回答 2

Stack Overflow用户

发布于 2014-10-29 09:56:38

字符串字面量开头的r字符表示。它不是一个操作符,而是一个前缀。

在普通的字符串文字中,需要对某些字符进行转义才能使它们成为字符串的一部分,例如"\。需要对"字符进行转义,因为否则它将终止字符串,并且需要对\进行转义,因为它是转义字符。

在原始字符串文字中,您可以在r和开始"之间放置任意数量的#符号。要关闭原始字符串文字,必须有一个结束的",后跟与开头相同数量的#字符。使用零个或多个#字符,您可以在字符串中放置文字\字符(\字符没有任何特殊含义)。对于一个或多个#字符,您可以将文字"字符放入字符串中。如果字符串中需要"后跟一系列#字符,那么只需使用相同数量的#字符加1来分隔字符串即可。例如:r##"foo #"# bar"##表示字符串foo #"# bar。文字不会在中间的引号处停止,因为它后面只有一个#,而文字是以两个#开始的。

要回答问题的最后一部分,不可能有一个字符串文字来计算当前作用域中的变量。一些语言,如PHP,支持它,但不支持Rust。您应该考虑改用format!宏。请注意,对于JSON,即使是在原始字符串文字中,您仍然需要双括号,因为该字符串是由宏来解释的。

代码语言:javascript
复制
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。

票数 67
EN

Stack Overflow用户

发布于 2019-08-25 23:56:53

我第一次看到这种奇怪的符号是在glium tutorials (旧的图形管理板条箱)中,它被用来“封装”GLSL代码(GL着色语言)并将其传递给GPU的着色器

https://github.com/glium/glium/blob/master/book/tuto-02-triangle.md

据我所知,r#...#的内容看起来是原封不动的,它没有以任何方式解释。因此,原始字符串。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26611664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档