core::fmt::Arguments
状态文档:
此结构表示格式字符串及其参数的安全预编译版本。由于无法安全地完成此操作,因此无法在运行时生成该文件,因此未提供任何构造函数,并且该字段为私有字段以防止修改。
关于在运行时生成无法安全完成的结构到底有什么用?
实际上,我认为这句话有点误导。您可以Arguments
使用在运行时创建值format_args!
。您不能做的是Arguments
使用任意字符串格式表达式构建。
这是因为保留的主要不变式Arguments
为:
例如,如果您的字符串格式为,"{0}{1:?}{2:x}{2:X}"
则必须具有三个参数:第一个必须实现Display
,第二个Debug
和第三个LowerHex + UpperHex
。
您可以创建一个API以Arguments
使用此类不变量来构建运行时,但不能使用非const格式的字符串。因为您将如何知道需要哪些特征?那有什么意义呢?如果要不使用字符串格式来格式化对象,则没有理由首先要求使用a Arguments
。
通过要求字符串是文字,宏format_args!
可以在编译期间检查参数是否实现了适当的特征。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句