Cairo에서 출력을 하면 프로그램을 실행하는 동안 메시지나 디버그 정보를 표시할 수 있어요.
Cairo는 출력을 위한 두 가지 매크로를 제공해요.
println!: 메시지를 출력한 뒤 줄바꿈해요.print!: 줄바꿈 없이 메시지를 출력해요.println!("Hello, Cairo!");
println!("x = {}, y = {}", 10, 20);
{} 자리 표시자는 제공된 값으로 대체돼요.
format!을 사용하면 바로 출력하지 않고 ByteArray를 만들 수 있어요.
let result = format!("{}-{}-{}", "tic", "tac", "toe");
println!("{}", result); // Output: tic-tac-toe
사용자 정의 타입을 출력하려면 Display를 구현하거나 Debug를 파생해야 해요.
#[derive(Debug)]
struct Point { x: u8, y: u8 }
let p = Point { x: 3, y: 4 };
println!("{:?}", p); // Debug output: Point { x: 3, y: 4 }
{:x}를 사용하면 정수를 16진수로 출력할 수 있어요.
println!("{:x}", 255); // Output: ff
마법의 세계 Echoes에는 "EchoSpeak"이라는 강력한 주문이 있어요. 이 주문을 쓰면 마법사들은 자신의 생각과 관찰을 말로 전할 수 있고, 마법의 깃펜이 그 말을 받아 적어요. 이 주문을 익히려면 마법사들은 숫자든, 사물이든, 복잡한 마법 구조물이든, 자신의 말과 생각을 명확하고 간결하게 표현하는 법을 배워야 해요.
마법사의 견습생으로서 해야 할 일은 EchoSpeak의 기술을 익히는 거예요.
그러려면 여러 종류의 마법 데이터를 마법이 걸린 두루마리에 출력하는 법을 배워야 해요.
EchoSpeak은 ByteArray로 표현되는 특별한 마법 잉크를 사용해, println!이나 print! 같은 주문으로 형식이 지정된 메시지를 두루마리에 새겨 넣는 방식으로 동작해요.
그런데 마법이 걸린 물건이나 주문처럼 직접 만든 마법 구조물을 다룰 때는, EchoSpeak이 그런 객체를 어떻게 표현할지 알 수 있도록 특별한 주문이 필요해요.
바로 여기서 여러분의 마법이 필요한데, 직접 만든 마법 물건을 위해 traits라고 불리는 특별한 주문을 구현하는 법을 배우는 거예요.
때로 마법사들은 마법의 단어를 두루마리에 새기기 전에 형식을 지정해야 해요. 세 개의 마법 단어를 하나의 메시지로 형식 지정하는 함수를 작성해요.
format_magical_chant라는 함수를 구현해서 "chant1-chant2-chant3" 형태의 형식 지정된 문자열을 반환하도록 해요.
예:
let result = format_magical_chant("Spark", "Shine", "Glow");
assert_eq!(result, "Spark-Shine-Glow");
Echoes 세계는 마법이 걸린 물건들로 가득해요.
그중 하나가 EchoStone인데, 여기에는 power와 duration이라는 두 가지 마법 속성이 있어요.
여러분의 임무는 Display 트레이트를 구현해서 EchoStone을 "EchoStone [power: x, duration: y]"라는 특별한 형식의 ByteArray로 변환하는 stringify_echo_stone 함수를 구현하는 거예요.
예:
let stone = EchoStone { power: 100, duration: 300 };
assert_eq!(stringify(stone), "EchoStone [power: 100, duration: 300]");
마법사 견습생에게 디버깅은 복잡한 마법 구조물을 다룰 때 꼭 필요해요.
Debug 트레이트를 사용해 디버깅을 위해 EchoStone을 출력하는 함수를 만들어요.
형식은 "Debugging EchoStone: { power: x, duration: y }"여야 해요.
예:
let stone = EchoStone { power: 25, duration: 10 };
assert_eq!(format!("{:?}", stone), "Debugging EchoStone: { power: 25, duration: 10 }");