我很遗憾地问这么简单的问题......前一天,我开始学习Rust并试用了println!
方法。
fn main() {
println!("Hello {}!", "world");
}
-> Hello world!
然后,我找到了其他格式样式:{}, {:}, {:?}, {?}
,...
我知道{}
代替String
,但我不理解其他格式样式。这些款式如何相互不同?我认为{:?}
是数组或向量。这是对的吗?
请使用示例代码解释这些格式样式:(
答案 0 :(得分:14)
为了彻底,std::fmt
格式化语法由两部分组成:
{<position-or-name>:<format>}
其中:
<position-or-name>
可以是参数位置:println!("Hello {0}!"
,&#34; world&#34;);`,请注意它在编译时检查<position-or-name>
也可以是名称:println!("Hello {arg}!", arg = "world");
<format>
是one of the following formats,其中每种格式都需要参数来实现特定的特征,在编译时检查缺少位置,名称或格式的默认设置是选择与{}
索引匹配的参数并使用Display
特征。然而,有各种特质!从上面的链接:
?
⇒调试o
⇒Octalx
⇒LowerHexX
⇒UpperHexp
⇒指针b
⇒Binarye
⇒LowerExpE
⇒OpperExp如果有必要,将来可以添加新的特征。
答案 1 :(得分:5)
println!()
是一个使用std::fmt
syntax和{}
表示参数的宏。如果括号保留为空({}
),则相应的参数需要实现Display
特征,如果它们包含:?
,则表示参数Debug
应该使用实现。
底线是它不是参数&#39;与此相关的类型,但the traits they implement。例如,Vec
执行Debug
,但他们没有实施Display
,这就是为什么你不能{}
使用{:?}
$scope.$on
$apply
1}}工作正常。