چاپ در Cairo به شما امکان میدهد تا هنگام اجرای برنامه پیامها یا اطلاعات Debug را نمایش دهید.
Cairo دو ماکرو برای چاپ در اختیار شما میگذارد:
println!: یک پیام را به همراه یک خط جدید چاپ میکند.print!: یک پیام را بدون خط جدید چاپ میکند.println!("Hello, Cairo!");
println!("x = {}, y = {}", 10, 20);
جانگهدارهای {} با مقادیر ارائهشده جایگزین میشوند.
برای ساختن یک ByteArray بدون چاپ فوری، از format! استفاده کنید:
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} استفاده کنید:
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.
وظیفهی شما پیادهسازی تابع stringify_echo_stone است که با پیادهسازی trait Display، یک EchoStone را به یک ByteArray در قالبی ویژه، "EchoStone [power: x, duration: y]"، تبدیل میکند.
مثال:
let stone = EchoStone { power: 100, duration: 300 };
assert_eq!(stringify(stone), "EchoStone [power: 100, duration: 300]");
به عنوان کارآموز جادوگر، اشکالزدایی برای ساختارهای جادویی پیچیده ضروری است.
شما تابعی میسازید که با استفاده از trait 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 }");