Rust 是否可以使用变量作为格式中的填充参数!宏?

Rust 是否可以使用变量作为格式中的填充参数!宏?,rust,formatting,fill,Rust,Formatting,Fill,我想用格式模仿Python的rjust、ljust和center函数宏,但我只能找到一个可以传入字符串和宽度的解决方案。如果您想传入fill参数,它将不起作用 文档告诉我可以为格式提供变量对于width参数,它工作得很好。当我尝试使用变量进行填充时,编译器无法识别该模式 仅宽度作为变量起作用: fn rjust(text: &str, width: usize, fill: Option<char>) -> String { format!("{text:>

我想用
格式模仿Python的
rjust
ljust
center
函数宏,但我只能找到一个可以传入字符串和宽度的解决方案。如果您想传入fill参数,它将不起作用

文档告诉我可以为
格式提供变量
对于width参数,它工作得很好。当我尝试使用变量进行填充时,编译器无法识别该模式

仅宽度作为变量起作用:

fn rjust(text: &str, width: usize, fill: Option<char>) -> String {
    format!("{text:>width$}", text = text, width = width)
}
println!("{}", rjust("Hello", 10)); // "     Hello"
错误消息:

错误:无效的格式字符串:应为`'}`,找到`'>'`
-->src/lib.rs:4:24
|
4 |“{text:fill>width$}”,
|-^应为格式字符串中的“}”
|              |
|因为这个大括号
|
=注意:如果要打印`{`,可以使用`{{`
如果我只提供一个字符而不是fill变量,它可以正常工作。请注意
*
字符:

fn rjust(text: &str, width: usize, fill: char) -> String {
    format!("{text:*>width$}", text = text, width = width)
}
println!("{}", rjust("Hello", 20, '_')); // ***************Hello
我希望fill变量版本的工作原理与硬编码的
*
字符版本相同

一种解决方法是从宽度中减去文本的长度,然后创建一个由填充字符组成的该长度(填充长度)的
字符串,并将其连接起来:

fn rjust(text: &str, width: usize, fill: char) -> String {
    let fill_len = width - text.len();
    let fill_str: String = (0..fill_len).map(|_| fill).collect();
    String::from(fill_str + text)
}
println!("{}", rjust("Hello", 20, '*')); // ***************Hello

不幸的是,没有内置的方法来做到这一点

格式化语法是随着早期采用者当时所需要的功能而发展起来的。它的简洁意味着新功能正在被开发

fn rjust(text: &str, width: usize, fill: char) -> String {
    let fill_len = width - text.len();
    let fill_str: String = (0..fill_len).map(|_| fill).collect();
    String::from(fill_str + text)
}
println!("{}", rjust("Hello", 20, '*')); // ***************Hello