[Rust] 러스트 출력 포맷팅 (Formatted print) 예시

출력 매크로 종류

format! 작성한 포맷팅대로 string 생성
print! format! + 콘솔로 출력 (io::stdout)
println! print!에서 줄바꿈 추가
eprint! format! + 표준에러로 출력 (io::stderr)
eprintln! eprint!에서 줄바꿈 추가

 

Positional parameters (arguments by position)

    println!("{} 일", 1);  		1 일 (i32)
    println!("{} 일", 2i64);		2 일 (i64)
    println!("내 생일은 {}월 {}일", 6, 9); 내 생일은 6월 9일 (i32)


Named parameters

println!("{0}에는 은방울님이 계신다면 {1}에는 달씨님이 계신다.", "고대", "연대");
고대에는 은방울님이 계신다면 연대에는 달씨님이 계신다
println!("Bro got nervous💀\n{b} {a} {c} {d}",
    a="please",
    b="can i get a",
    c="buger",
    d="cheese"
    );
Bro got nervous💀
can i get a please buger cheese

 

Formatting Parameters

width

println!("올해는 {:15} 거리가 매우 멀구나", "너와 나의");
println!("올해는 {:1$} 거리가 매우 멀구나", "너와 나의", 15);
println!("올해는 {1:0$} 거리가 매우 멀구나", 15, "너와 나의");
println!("올해는 {:width$} 거리가 매우 멀구나", "너와 나의", width = 15);
let distance = 15;
println!("올해는 {:distance$} 거리가 매우 멀구나", "너와 나의");
올해는 너와 나의           거리가 매우 멀구나

$ 구문으로 인수 참조하는건 "next argument"에 영향을 미치지 않습니다.


예를들어서 아래 코드 같은 경우

println!("{} {1:0$} {} {2:0$} {} {} ", 1, 2, 3, 4);
1 2 2 3 3 4
next argument를 통해 출력되는 값이 4개, 참조로 출력되는 값이 2개

변수는 총 4개이지만 참조 출력을 2번 더 넣어 6개의 숫자가 나옵니다.

이 경우 "next arguemnt"의 영향을 받지 않으므로 카운트가 되지 않습니다.

 

Fill/Alignment

    println!("내 대답은 {:<6}!", "No");
    println!("내 대답은 {:*<6}!", "No");
    println!("내 대답은 {:^6}!", "No");
    println!("내 대답은 {:>6}!", "No");
    
내 대답은 No    !
내 대답은 No****!
내 대답은   No  !
내 대답은     No!

솔직히 좀 행복해요. alignment가 너무 예뻐요.

< : left aligned

^ : center aligned

> : right aligned

 

Sign / # / 0

println!("내 전화번호는 {:03b}-{:04}-{:04x} {2:#0$x}", 2, 1316/7, 392);
내 전화번호는 010-0188-0188 0x188

{:03b} - 2진수로 출력하되, 3자리 수까지는 0으로 채워 출력합니다.

{2:#0$x}

설명1. 3번째 인자를 참조하여 출력

설명2. 0x, 0b, 0o와 같은 alternate 출력  

설명3. width 0으로 설정하고 출력 (숫자 없으면 오류)

설명4. hex 값 출력

 

기타 중요한 점

Localization

Rust의 표준 라이브러리에서 제공하는 locale 개념이 없으며, 모든 시스템에서 동일한 결과를 제공합니다.

println!("The value is {}", 1.5);
The value is 1.5

10진수 출력을 넣어도 1.5를 출력합니다.

 

Escaping

println!("{{{{{{{{{{ }}}}}}}}}}");
{{{{{ }}}}}

문자열로 { 이나 } 기호를 삽입하고 싶다면 {{ 또는 }} 을 입력해서 출력할 수 있습니다.

 

포맷 특성

없음 Display
? Debug
x? 16진수, 소문자, Debug
X? 16진수, 대문자, Debug
o 8진수
x 16진수, 소문자
X 16진수, 대문자
p 포인터
e 소문자 지수부
E 대문자 지수부

 


그외, 중요한 레퍼런스

std::fmt

https://doc.rust-lang.org/std/fmt/

 

std::fmt - Rust

Utilities for formatting and printing Strings. This module contains the runtime support for the format! syntax extension. This macro is implemented in the compiler to emit calls to this module in order to format arguments at runtime into strings. §Usage T

doc.rust-lang.org

 

그냥 간단한 예시

https://doc.rust-lang.org/rust-by-example/hello/print/fmt.html