在 Rust 中将动态字符串居中?

5 formatting rust

fn main() {
    println!("{:=^50}", "Stuff");
    println!("{:=^50}", format_args!("Stuff {}", 42));
}
Run Code Online (Sandbox Code Playgroud)

人们可能会认为它没有理由不起作用,但实际上,它不起作用:

======================Stuff=======================
Stuff 42
Run Code Online (Sandbox Code Playgroud)

游乐场

当然,我可以自己做,但是有内置的方法可以做到这一点吗?

was*_*mup 2

试试这个(参见fmt):

fn main() {
    println!("{:=^50}", "Stuff");
    println!("{:=^50}", format!("Stuff {}", 42));
}
Run Code Online (Sandbox Code Playgroud)

输出:

======================Stuff=======================
=====================Stuff 42=====================
Run Code Online (Sandbox Code Playgroud)

尝试这个

fn main() {
    println!("{:=^50}", "Stuff");
    println!("{:=^50}", std::fmt::format(format_args!("Stuff {}", 42)));
}
Run Code Online (Sandbox Code Playgroud)

输出:

======================Stuff=======================
=====================Stuff 42=====================
Run Code Online (Sandbox Code Playgroud)

请参阅format_args

该宏生成 fmt::Arguments 类型的值。该值可以传递给 std::fmt 中的宏以执行有用的重定向。所有其他格式化宏(format!、write!、println!等)都通过此代理。format_args! 与其派生宏不同,它避免了堆分配。

论据

格式参数!宏将安全地创建此结构的实例。该宏在编译时验证格式字符串,以便可以安全地执行写入和格式化函数的使用。

请参阅显示参数

impl Display for Arguments<'_> {
    fn fmt(&self, fmt: &mut Formatter<'_>) -> Result {
        write(fmt.buf, *self)
    }
}
Run Code Online (Sandbox Code Playgroud)