1.2 Formatted print

출력은 macros 들을 std::fmt 에 정의하여 사용하는데 그 중 몇개를 보자:

  • format!: 텍스트를 형식에 맞춰 String으로 작성[String]
  • print!: format!과 같으며 콘솔로 출력.
  • println!: print!과 같으며 새 줄 추가.
  • format!: write formatted text to String
  • print!: same as format! but the text is printed to the console.
  • println!: same as print! but a newline is appended.

모든 텍스트의 분석은 같은 방식을 따른다. 추가하자면 형식화 방식의 적합성은 컴파일 시에 검증된다.

fn main() {
    // 일반적으로 `{}`는 인자에 따라 자동으로 변환된다. 
    // 다음은 String으로 변환될 것이다.
    println!("{} days", 31);


    // 접미사가 없으면, 31은 i31이 된다. 
    // 접미사를 추가해 31의 type을 변경할 수 있다. 

    // 출력을 위한 다양한 옵션들이 있다. 
    // 위치지정 인자도 사용될 수 있다. 
    println!("{0}, this is {1}. {1}, this is {0}", "Alice", "Bob");

    // 이름을 인자로 사용할 수 있다. 
    println!("{subject} {verb} {object}",
             object="the lazy dog",
             subject="the quick brown fox",
             verb="jumps over");

    // `:`; 뒤에 특수 형식 지정자를 사용할 수 있다..
    println!("{} of {:b} people know binary, the other half don't", 1, 2);

    // 넓이를 지정하여 오른쪽 정렬을 사용할 수 있다. 이는 다음과 같이 출력될 것이다.
    // "     1". 5칸의 공백과 "1".
    println!("{number:>width$}", number=1, width=6);

    // 여분의 공간을 0으로 채운 숫자도 사용할 수 있다. 이는 "000001"을 출력할 것.
    println!("{number:>0width$}", number=1, width=6);

    // 위치지정 인자 사용시 정확한 수의 인자들이 왔는데 검증받게 될 것이다. 
    println!("My name is {0}, {1} {0}", "Bond");
    // FIXME ^ 다음의 인자를 추가해서 버그를 수정해보세요 : "James"

    // `i32` 내장한 구조체를 만들자. 그리고 `Structure`라고 이름지었다.
    #[allow(dead_code)]
    struct Structure(i32);

    // 하지만, Structure와 같이 당신이 만든 형태는 좀더 복잡해진다. 
    // 다음 문장은 실행되지 않을 것이다.
    println!("This struct `{}` won't print...", Structure(3));
    // FIXME ^ 이 줄을 주석처리 해주세요.
}

std:fmt는 많은 traits를 통해 텍스트를 출력한다. 두 중요한 기본형은 다음 항목들이다:

  • fmt::Debug: {:?} 표시자로 사용된다. 디버깅을 위한 의도의 형식문자.
  • fmt::Display: {} 표시자로 사용된다. 좀 더 수려하고, 사용자 친화적 형식문자.

여기서, fmt::Display가 사용될 수 있는 이유는 표준 라이브러리에 타입을 위해 구현되어 있기 때문이다. 임의 타입을 출력하고자 한다면, 조금 더 해야할 작업이 있다.

Activities

  • 위의 두 문제를 수정하여 에러 없이 출력해보세요. (FIXME를 찾으세요)
  • let pi = 3.141592로 pi를 선언하고 Pi is roughly 3.142를 출력하는 println! 문을 추가해보세요. (힌트 : std::fmt를 참고해서 숫자를 형식에 맞춰 출력하는 법을 참고하세요.)

See also

std::fmt, macros, struct, and traits

results matching ""

    No results matching ""