提问人:mike rodent 提问时间:8/31/2023 最后编辑:cafce25mike rodent 更新时间:8/31/2023 访问量:107
在单行原始字符串文字中包含换行符?
Include newline in one-line raw string literal?
问:
为了 Elasticsearch 的目的,构造一个用于批量发布的字符串,我需要符合特定的换行符格式。像这样的原始字符串文字可以完成这项工作:
let json = format!(r#"{{"index":{{"_id":"{}"}}}}
{}
"#, *num, self.ldoc_texts[sequence_type]);
self.bulk_post_str.push_str(&json);
上面的第 2 行和第 3 行特意写成没有缩进,以免在行首引入虚假空格。
有没有办法把这个写在同一行上?
let json = format!(r#"{{"index":{{"_id":"{}"}}}}\n{}\n"#, *num, self.ldoc_texts[sequence_type]);
self.bulk_post_str.push_str(&json);
上述方法不起作用:在生成的字符串中找到文本序列“\n”,而不是换行符。
答:
2赞
n. m. could be an AI
8/31/2023
#1
您可以使用原始文本和常规文本粘在一起。concat!
print!(concat!(r#"This is a "raw" literal"#, "\n", r#"continued after "#, "\n"))
评论
0赞
mike rodent
8/31/2023
谢谢。当我需要包含插值变量时,这似乎并不那么实用。将更新问题。
1赞
n. m. could be an AI
8/31/2023
@mikerodent 您需要以相反的方式执行此操作:format!(concat!(...))
1赞
Sven Marnach
8/31/2023
#2
到目前为止提到的选项似乎不是很可读。我会选择更清楚地显示意图的东西,例如
use serde_json::{json, to_string}, std::fmt::Write;
let json = json!({"index": {"_id": *num}});
writeln!(self.bulk_post_str, "{}", to_string(&json).unwrap()).unwrap();
writeln!(self.bulk_post_str, "{}", self.ldoc_texts[sequence_type]).unwrap();
这有点冗长,但我认为它更容易阅读。
这些有点不幸,但它们都是为了万无一失的电话。unwrap()
评论