Можно ли написать что-то вроде:
fn main() {
let my_string: &str = "Testing for new lines \
might work like this?";
}
Можно ли написать что-то вроде:
fn main() {
let my_string: &str = "Testing for new lines \
might work like this?";
}
Если я правильно читаю ссылку на язык, похоже, это должно сработать. Язык ref утверждает, что поддерживается \n
и т.д. (Как обычные экранированные символы для вставки разрывов строк в строку), а также "дополнительные экранированные символы", включая LF, CR и HT.
Другой способ сделать это - использовать строковый литерал строки:
Строковые литералы не обрабатывают никаких экранов. Они начинаются с символ
U+0072
(r
), за которым следует ноль или более символаU+0023
(#
) и aU+0022
(double-quote). Тело необработанной строки может содержат любую последовательность символов Юникода и заканчиваются только другой символU+0022
(double-quote), за которым следует тот же номер изU+0023
(#) символов, предшествующих открытиюU+0022
(двойной кавычки).Все символы Юникода, содержащиеся в корпусе необработанной строки, представляют себя, символы
U+0022
(двойная кавычка) (за исключением случаев, когда они следуют по меньшей мере, столько символовU+0023
(#
), сколько было использовано для запуска raw string literal) илиU+005C
(\
) не имеют особого значения.Примеры строковых литералов:
"foo"; r"foo"; // foo "\"foo\""; r#""foo""#; // "foo" "foo #\"# bar"; r##"foo #"# bar"##; // foo #"# bar "\x52"; "R"; r"R"; // R "\\x52"; r"\x52"; // \x52
Существует два способа написания многострочных строк в Rust, которые имеют разные результаты. Вы должны выбирать между ними с осторожностью в зависимости от того, что вы пытаетесь выполнить.
Метод 1: Висячие пробелы
Если строка, начинающаяся с "
, содержит литеральный разрыв строки, компилятор Rust "сожрает" все пробелы между последним небетовым символом строки и первым небетовым символом следующей строки и замените их на один .
Пример:
fn test() {
println!("{}", "hello
world");
}
Независимо от того, сколько символов буквально (пробел) (нуль или сто) появляются после
hello
, вывод выше всегда будет hello world
.
Метод 2: разрыв строки с обратным слэшем
Это полная противоположность. В этом режиме все пробелы перед литеральным \
в первой строке сохраняются, а все последующие пробелы на следующей строке также сохраняются.
Пример:
fn test() {
println!("{}", "hello \
world");
}
В этом примере вывод hello world
.
Кроме того, как упоминалось в другом ответе, у Rust есть строки "raw literal", но они не входят в это обсуждение, так как в Rust (в отличие от некоторых других языков, которым нужно прибегать к необработанным строкам для этого) поддерживает литеральные разрывы строк в цитируемый контент без ограничений, как мы можем видеть выше.
Если вы хотите избежать появления символов новой строки и лишних пробелов, вы можете использовать макрос concat!
. Он объединяет строковые литералы во время компиляции.
let my_string = concat!(
"Testing for new lines ",
"might work like this?",
);
assert_eq!(my_string, "Testing for new lines might work like this?");
Подробнее на https://doc.rust-lang.org/std/macro.concat.html