» Rust快速入门 » 1. 基础篇 » 1.2 格式化

格式化

format!

let pi = 3.14159265359;
let formatted_pi = format!("The value of pi is approximately {:.2}", pi);
// The value of pi is approximately 3.14

fromat! 将格式化的文本写入 String.

格式化模板中花括号 {...} 占位符会被对应的参数值替代。

println!

println!format! 类似, 不过还会在末尾添加换行符,以及打印到控制台(io::stdout)。

println!("{} students", 25);
// 25 students

// Positional arguments 顺序参数
println!("{0} is a mouse, {1} is a cat. {1} and {0} are friends.", "Jerry", "Tom");
// Jerry is a mouse, Tom is a cat. Tom and Jerry are friends.

// Named arguments 命名参数
println!("{subject} {verb} {object}",
             object="the lazy dog",
             subject="the quick brown fox",
             verb="jumps over");
// the quick brown fox jumps over the lazy dog

// 格式化可以在 ':' 后添加修饰符
let num = 125;
println!("Base 10:               {}",   num); // 125
println!("Base 2 (binary):       {:b}", num); // 1111101,二进制
println!("Base 8 (octal):        {:o}", num); // 175,八进制
println!("Base 16 (hexadecimal): {:x}", num); // 7d,十六进制,小写字母
println!("Base 16 (hexadecimal): {:X}", num); // 7D,十六进制,大写字母

Debug trait 调试特征

任何类型想要使用 std::fmt 进行格式化都必须保证自身是 printable(可打印的)。像 fmt::Debugfmt::Display 之类特征帮助类型实现可打印。 任何类型都可以通过 derive1 属性自动获得 fmt::Debug 特征的实现,从而用于调试。 而 fmt::Display 特征则都需要手动实现,从而得到一个更优雅,更用户友好的展示效果。

// 没有实现任何*可打印*特征,无法打印
struct CustomStruct1(i32);

// `derive` 属性自动获得 `fmt::Debug` 特征实现
// It's printable
#[derive(Debug)]
struct CustomStruct2(i32);

println!("Now {:?} will print!", CustomStruct2(3));
// Now CustomStruct2(3) will print!

可能你已经注意到 fmt::Debug 使用特助的 {:?} 占位符。

Display trait 展示特征

通过实现 fmt::Display trait 来自定义展示样式非常有用。

use std::fmt;

struct Structure(i32, f64);

// 手动实现 `fmt::Display` trait
// 暂时忽略那些不了解的语法特性,后面章节会学习
impl fmt::Display for Structure {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "Int: {}, Float: {}", self.0, self.1)
    }
}


fn main() {
    let s = Structure(58, 3.14);
    println!("{}", s); // Int: 58, Float: 3.14
}

代码挑战

修改编辑器中代码使其打印 Display: 4.2 + 5.8i | Debug: Complex { real: 4.2, imag: 5.8 }

Footnotes

  1. derive:得到; 获得; (使)产生; 取得; (使)起源。

Loading...
> 此处输出代码运行结果
上页
下页