2013-03-07 32 views

Trả lời

30

Nếu tôi đọc language reference một cách chính xác, sau đó nó trông như thế nên làm việc. Các ref ngôn ngữ nói rằng \n vv được hỗ trợ (như thoát chung, để chèn ngắt dòng vào chuỗi của bạn), cùng với "thoát bổ sung" bao gồm LF, CR và HT.

+8

Lee đúng. Dấu gạch chéo ngược có thể được sử dụng để mở rộng một chuỗi liên tục trên nhiều dòng. Khoảng trống hàng đầu được bỏ qua từ dòng thứ hai. –

+0

Cảm ơn - mã ban đầu của tôi có lỗi khác khiến tôi tin rằng '\' sẽ không hoạt động. – sdasdadas

29

Một cách khác để làm điều này là sử dụng một raw string literal:

xâu thô không xử lý bất kỳ thoát. Chúng bắt đầu bằng ký tự U+0072 (r), tiếp theo là 0 hoặc nhiều ký tự U+0023 (#) và ký tự U+0022 (dấu ngoặc kép). Cơ thể chuỗi thô có thể chứa bất kỳ chuỗi các ký tự Unicode và chỉ được chấm dứt bởi khác U+0022 (double-quote) nhân vật, sau đó là cùng một số của U+0023 ký tự (#) trước lễ khai mạc U+0022 (double-quote) tính cách.

nhân vật Tất cả Unicode chứa trong cơ thể chuỗi nguyên đại diện cho mình, các nhân vật U+0022 (double-quote) (trừ khi theo bởi ít nhất là nhiều U+0023 (#) ký tự như được sử dụng để bắt đầu chuỗi thô đen) hoặc U+005C (\) không có bất kỳ ý nghĩa đặc biệt nào.

Ví dụ cho literals chuỗi:

"foo"; r"foo";      // foo 
"\"foo\""; r#""foo""#;    // "foo" 

"foo #\"# bar"; 
r##"foo #"# bar"##;    // foo #"# bar 

"\x52"; "R"; r"R";     // R 
"\\x52"; r"\x52";     // \x52 
+5

Đúng, nhưng không cần thiết. Mọi chuỗi ký tự trong Rust có thể là nhiều dòng. – DenisKolodin

0

Có hai cách viết chuỗi đa dòng trong Rust có kết quả khác nhau. Bạn nên chọn giữa chúng với sự chăm sóc tùy thuộc vào những gì bạn đang cố gắng thực hiện.

Phương pháp 1: lơ lửng khoảng trắng

Nếu một chuỗi bắt đầu với " chứa một ngắt dòng chữ, trình biên dịch Rust sẽ "nuốt chửng" tất cả các khoảng trắng giữa các nhân vật phi khoảng trắng cuối cùng của dòng và là người đầu tiên ký tự không khoảng trắng của dòng tiếp theo và thay thế chúng bằng một đơn .

Ví dụ:

fn test() { 
    println!("{}", "hello 
    world"); 
} 

Không có vấn đề bao nhiêu ký tự (không gian trống) theo nghĩa đen (zero hoặc một trăm) xuất hiện sau khi hello, sản lượng của các bên trên sẽ luôn luôn được hello world.

Cách 2: Dấu gạch chéo ngược ngắt dòng

này hoàn toàn ngược lại. Trong chế độ này, tất cả khoảng trắng trước khi một chữ số \ trên dòng đầu tiên được giữ nguyên và tất cả khoảng trắng tiếp theo trên dòng tiếp theo là cũng được giữ nguyên.

Ví dụ:

fn test() { 
    println!("{}", "hello \ 
    world"); 
} 

Trong ví dụ này, đầu ra là hello world. Ngoài ra, như đã đề cập trong một câu trả lời khác, Rust có chuỗi "nguyên văn", nhưng họ không tham gia vào cuộc thảo luận này như trong Rust (không giống như một số ngôn ngữ khác cần dùng đến chuỗi thô) trong nội dung được trích dẫn không có giới hạn, như chúng ta có thể thấy ở trên.

Các vấn đề liên quan