Rust 为什么多行字符串在开始时跳过预期的空白?

Rust 为什么多行字符串在开始时跳过预期的空白?,rust,string-literals,Rust,String Literals,我有一些多行字符串与预期的空白。对于其中一些,删除了一些空白: 常量工作:&str=\ ┌─┬┐ │ ││ ╞═╪╡ │ ││ ├─┼┤ ├─┼┤ │ ││ └─┴┘ ; 常量非工作状态:&str=\ ╷ │ ╶─┼╴ │ ╶─┼╴ ╶─┼╴ │ ╵ ; 主楼酒店{ println!{},正在工作; println!{},非工作状态; } 它删除了非工作行中行开头的一些空白。印刷: ╷ │ ╶─┼╴ │ ╶─┼╴ ╶─┼╴ │ ╵ 我认为它必须处理\的使用,

我有一些多行字符串与预期的空白。对于其中一些,删除了一些空白:

常量工作:&str=\ ┌─┬┐ │ ││ ╞═╪╡ │ ││ ├─┼┤ ├─┼┤ │ ││ └─┴┘ ; 常量非工作状态:&str=\ ╷ │ ╶─┼╴ │ ╶─┼╴ ╶─┼╴ │ ╵ ; 主楼酒店{ println!{},正在工作; println!{},非工作状态; } 它删除了非工作行中行开头的一些空白。印刷:

╷ 
  │ 
╶─┼╴
  │ 
╶─┼╴
╶─┼╴
  │ 
  ╵ 
我认为它必须处理\的使用,但我不知道如何解决它,而不启动后的线


Rust将自动删除预期的空白,因为长字符串通常会像这样被分成多行,空白仅用于格式化目的

可以使用禁用此行为。请注意开始和结束处的额外分隔符和自定义分隔符

const NON_WORKING: &str = r#"
  ╷ 
  │ 
╶─┼╴
  │ 
╶─┼╴
╶─┼╴
  │ 
  ╵ 
"#;

Rust将自动删除预期的空白,因为长字符串通常会像这样被分成多行,空白仅用于格式化目的

可以使用禁用此行为。请注意开始和结束处的额外分隔符和自定义分隔符

const NON_WORKING: &str = r#"
  ╷ 
  │ 
╶─┼╴
  │ 
╶─┼╴
╶─┼╴
  │ 
  ╵ 
"#;

我自己还没有尝试过,但我听说它旨在帮助编写包含缩进的多行字符串文字。它从所有行中平均删除前导空格,而不是从每行中独立删除前导空格

使用indoc 使用indoc::indoc; fn干线{ 让测试=印多克{ def你好: 打印“你好,世界!” 你好 }; let expected=def hello:\n打印“你好,世界!”\n\nhello\n; 断言均衡测试,预期; }
我自己还没有尝试过,但我听说它旨在帮助编写包含缩进的多行字符串文字。它从所有行中平均删除前导空格,而不是从每行中独立删除前导空格

使用indoc 使用indoc::indoc; fn干线{ 让测试=印多克{ def你好: 打印“你好,世界!” 你好 }; let expected=def hello:\n打印“你好,世界!”\n\nhello\n; 断言均衡测试,预期; }
我最终使用了纯str并删除了首字母\n:

让工作:&str= ── ── ── ── ── .修剪\u开始\u匹配\n
我最终使用了纯str并删除了首字母\n:

让工作:&str= ── ── ── ── ── .修剪\u开始\u匹配\n
我试过了,但在iirc开头有一行,这是r后面的新行。如果不需要,请使用const NON_WORKING:&str=╷ 作为你的第一行是的,这正是目的。保持对齐和空格。我试过了,但在iirc开头有一行。这是r后面的新行。如果不需要,请使用const NON_WORKING:&str=╷ 作为你的第一行是的,这正是目的。保持对齐和空间。这很方便。谢谢事实上,这并没有像我所期望的那样对我所拥有的一些弦起到很好的作用。我正在添加一个新的答案。这很方便。谢谢事实上,这并没有像我所期望的那样对我所拥有的一些弦起到很好的作用。我正在添加一个新的答案。