You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust原始字符串字面量能否在单行内包含换行符?

Elasticsearch批量提交字符串的单行构造方法

你遇到的问题是:用多行原始字符串能生成符合要求的带实际换行的批量请求字符串,但尝试把代码写成单行时,生成的是字面量\n而非实际换行。下面给你两种可行的单行写法:

方法一:使用普通格式化字符串

放弃原始字符串,改用普通字符串,对双引号和大括号做转义,直接用\n表示换行:

let json = format!("{{\"index\":{{\"_id\":\"{}\"}}}}\n{}\n", *num, self.ldoc_texts[sequence_type]);
self.bulk_post_str.push_str(&json);

这里的\n会被format!解析为实际的换行符,同时{{}}会被转义成单个大括号,完全符合Elasticsearch批量请求的格式要求。

方法二:带命名参数的原始字符串写法

如果想继续用原始字符串避免过多转义,可以通过format!的命名参数传入换行符,这样代码保持单行,同时生成实际换行:

let json = format!(r#"{{"index":{{"_id":"{}"}}}}{newline}{}{newline}"#, *num, self.ldoc_texts[sequence_type], newline = "\n");
self.bulk_post_str.push_str(&json);

这里把"\n"作为命名参数newline传入,原始字符串里的{newline}会被替换成实际的换行符,既保留了原始字符串少转义的优势,又实现了单行代码构造。

为什么之前的写法无效?

Rust的原始字符串(r#"..."#)不会解析任何转义序列,所以你之前在原始字符串里写的\n会被当作普通的两个字符(反斜杠+n),而不是换行符,自然生成的就是字面量序列而非实际换行。

内容的提问来源于stack exchange,提问作者mike rodent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:55:12