programing

다중 행 문자열 리터럴의 구문은 무엇입니까?

muds 2023. 5. 1. 22:07
반응형

다중 행 문자열 리터럴의 구문은 무엇입니까?

Rust에서 문자열 구문이 어떻게 작동하는지 이해하는 데 어려움을 겪고 있습니다.구체적으로, 나는 다중 줄 문자열을 만드는 방법을 찾고 있습니다.

모든 문자열 리터럴은 다음과 같이 여러 줄로 구분할 수 있습니다.

let string = "line one
line two";

는 2줄 문자열로, 와 동일합니다."line one\nline two"(물론 사용할 수 있습니다.\n새 라인 이스케이프도 직접).서식 지정을 위해 여러 줄에 걸쳐 문자열을 끊으려면 다음을 사용하여 새 줄과 선행 공백을 벗어날 수 있습니다.\예:

let string = "one line \
    written over \
    several";

와 동일합니다."one line written over several".

문자열에서 줄 바꿈을 원하는 경우, 줄 바꿈을 추가할 수 있습니다.\:

let string = "multiple\n\
              lines\n\
              with\n\
              indentation";

와 같습니다."multiple\nlines\nwith\nindentation";

따옴표, 백슬래시 등을 포함하거나 포함하지 않을 수 있는 좀 더 긴 작업을 수행하려는 경우 원시 문자열 리터럴 표기법을 사용합니다.

let shader = r#"
    #version 330

    in vec4 v_color;
    out vec4 color;

    void main() {
        color = v_color;
    };
"#;

문자열 내에 큰따옴표와 해시 기호가 있는 경우 임의 개수의 해시를 구분 기호로 표시할 수 있습니다.

let crazy_raw_string = r###"
    My fingers #"
    can#"#t stop "#"" hitting
    hash##"#
"###;

출력:


    #version 330

    in vec4 v_color;
    out vec4 color;

    void main() {
        color = v_color;
    };

놀이터 링크

Huon의 답변은 정확하지만 들여쓰기가 번거로우시다면 들여쓰기된 다중 줄 문자열에 대한 절차 매크로인 Indoc을 사용하는 것을 고려해 보십시오.그것은 "오목된 문서"의 약자입니다.다음과 같은 매크로를 제공합니다.indoc!()여러 줄의 문자열 리터럴을 사용하여 들여쓰기를 취소하므로 공백이 아닌 맨 왼쪽 문자가 첫 번째 열에 있게 됩니다.

let s = indoc! {"
    line one
    line two
"};

결과는"line one\nline two\n".

공백은 문서의 맨 왼쪽 공백 문자를 기준으로 보존되므로, 다음은 줄 1을 기준으로 두 줄의 들여쓰기된 세 개의 공백을 가집니다.

let s = indoc! {"
    line one
       line two
"};

결과는"line one\n line two\n".

외부 상자를 사용하지 않고 줄 바꿈이 있는 여러 줄 문자열의 공백을 세부적으로 제어하려면 다음을 수행합니다.제 프로젝트에서 가져온 예입니다.

impl Display for OCPRecData {
    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
        write!(f, "OCPRecData {{\n\
            \x20   msg: {:?}\n\
            \x20   device_name: {:?}\n\
            \x20   parent_device_name: {:?}\n\
        }}", self.msg, self.device_name, self.parent_device_name)
    }
}

결과:

OCPRecData {
    msg: Some("Hello World")
    device_name: None
    parent_device_name: None
}
  • \n\각 코드 줄 끝에서 적절한 위치에 줄 바꿈을 만들고 이 코드 줄에서 추가 공백을 버립니다.
  • \x20(16진수; 10진수 32)는 ASCII 공간이며 문자열의 이 줄에 보존될 첫 번째 공간에 대한 표시기입니다.
  • \x20\x20\x20\x20그리고.\x20 같은 효과가 있습니다.

코드에서 여러 줄 텍스트를 들여쓰려는 경우:

let s = "first line\n\
    second line\n\
    third line";

println!("Multiline text goes next:\n{}", s);

결과는 다음과 같습니다.

Multiline text goes next:
first line
second line
third line

언급URL : https://stackoverflow.com/questions/29483365/what-is-the-syntax-for-a-multiline-string-literal

반응형