我很遗憾地问这么简单的问题......前一天,我开始学习Rust并尝试了这个println!
方法.
fn main() {
println!("Hello {}!", "world");
}
-> Hello world!
Run Code Online (Sandbox Code Playgroud)
然后,我找到了其他格式样式:{}, {:}, {:?}, {?}
,...
我知道{}
相反String
,但我不理解其他格式风格.这些款式如何相互不同?我认为{:?}
是数组或向量.这是对的吗?
请用示例代码解释这些格式样式:(
Mat*_* M. 14
为了彻底,std::fmt
格式化语法由两部分组成:
{<position-or-name>:<format>}
Run Code Online (Sandbox Code Playgroud)
哪里:
<position-or-name>
可以是参数位置:println!("Hello {0}!"
,"world");`,请注意它在编译时被检查<position-or-name>
也可以是一个名字: println!("Hello {arg}!", arg = "world");
<format>
是以下格式之一,其中每种格式都需要参数来实现特定的特征,在编译时检查在没有位置,名称或格式的情况下,默认值是选择与索引匹配的参数{}
并使用Display
特征.然而,有各种特质!从上面的链接:
?
⇒调试o
⇒八进制x
⇒LowerHexX
⇒OpperHexp
⇒指针b
⇒二进制e
⇒LowerExpE
⇒OpperExp如果有必要,将来可以添加新的特征.
println!()
是一个使用std::fmt
语法并{}
指示参数的宏.如果括号保留为空({}
),则相应的参数需要实现Display
特征,如果它们包含特征,则:?
意味着Debug
应该使用参数的实现.
最重要的是,它不是这里相关的参数类型,而是它们实现的特征.例如,Vec
tw实现Debug
,但它们没有实现Display
,这就是为什么你不能使用{}
它们同时{:?}
工作得很好.