g-var.com | G-VAR's Blog

Rust 1.2| 格式化输出

Tue Jul 28, 2015

转载请注明出处!

译文链接:Rust 1.2 | 格式化输出

英文原文:Formatted print


打印输出是由一系列的来进行处理的,这些宏包含在std::fmt标准库中。其中包含下面三种形式:

  • format!:将格式化的文本写入字符串
  • print!:功能与format!相同,但文本是被输出到控制台
  • println!:功能与print!相同,但会在一行的末尾追加换行符

所有的文本均以相同的形式进行解析。另外一点就是会在编译期检验文本格式的正确性。

fn main() {
    // 通常情况下,`{}`会自动替换任意参数,并且会将替换的内容字符串化。
    println!("{} days", 31);

    // 此处31未带有后缀,31默认是i32类型。也可以通过添加后缀来改变31的类型。

    // 显示的形式是有不同的可选样式的。
    // 可以使用位置参数。
    println!("{0}, this is {1}. {1}, this is {0}", "Alice", "Bob");

    // 也可以使用命名参数。
    println!("{subject} {verb} {predicate}",
             predicate="over the lazy dog",
             subject="the quick brown fox",
             verb="jumps");

    // 可以在`:`字符之后指定特殊的格式。
    println!("{} of {:b} people know binary, the other half don't", 1, 2);

    // 编译器甚至会进行检验,以确保使用正确的参数个数。
    // 下面的语句编译出错。
    println!("My name is {0}, {1} {0}", "Bond");
    // 修改 ^ 添加缺少的参数: "James"

    // 创建一个包含`i32`类型的结构体。并将其命名为`Structure`。
    struct Structure(i32);

    // 形如该结构体的自定义类型需要更复杂的处理。下面的输出不会奏效。
    // 下面的语句编译出错。
    println!("This struct `{}` won't print...", Structure(3));
    // 修改 ^ 注释掉上面这行。
}

std::fmt标准库中包含很多支配文本显示的traits。两个重要的基本形式如下:

  • fmt::Debug:使用{:?}标记。将文本进行格式化以用于调试。
  • fmt::Display:使用{}标记。将文本格式化成更优雅,更友好的形式。

此处使用fmt::Display是因为std标准库中为这些类型提供了实现形式。要打印自定义类型的文本,需要更多的操作步骤。

请参考: std::fmtmacrosstruct, 以及 traits

[ 转载必须在正文中标注并保留原文链接、译文链接等信息。]



  « Previous: Next: »