Rust 为什么可以';在运行时是否可以安全地生成参数?
各国的文件: 此结构表示格式字符串及其参数的安全预编译版本。这不能在运行时生成,因为它不能安全地完成,因此不提供构造函数,并且字段是私有的,以防止修改Rust 为什么可以';在运行时是否可以安全地生成参数?,rust,Rust,各国的文件: 此结构表示格式字符串及其参数的安全预编译版本。这不能在运行时生成,因为它不能安全地完成,因此不提供构造函数,并且字段是私有的,以防止修改 在运行时生成这样一个不能安全完成的结构到底是什么原因?事实上,我认为这句话有点误导。您可以在运行时使用格式参数创建参数的值。您不能使用任意字符串格式表达式构建参数 这是因为参数中的主要不变量是: 每个占位符都有一个参数 每个参数至少使用一次 每个参数都实现了正确的特性,每个参数都实现了正确的特性 例如,如果字符串格式为“{0}{1:?}{2:x}
在运行时生成这样一个不能安全完成的结构到底是什么原因?事实上,我认为这句话有点误导。您可以在运行时使用
格式参数创建参数的值代码>。您不能使用任意字符串格式表达式构建参数
这是因为参数中的主要不变量是:
每个占位符都有一个参数
每个参数至少使用一次
每个参数都实现了正确的特性,每个参数都实现了正确的特性
例如,如果字符串格式为“{0}{1:?}{2:x}{2:x}”
,则必须有三个参数:第一个参数必须实现显示
,第二个参数调试
,第三个参数LowerHex+UpperHex
您可以创建一个API,在运行时使用这些不变量构建参数
,但不能使用非常量格式字符串。因为你怎么知道需要什么样的品质?那又有什么意义呢?如果希望不使用字符串格式格式化对象,那么首先就没有理由要求使用参数
通过要求字符串是文本,宏format_args代码>可以在编译时检查参数是否实现了正确的特性。谢谢,这非常有意义。至于“这有什么意义?”:我想使用提供给我的proc宏的字符串格式格式化一个对象,所以是以令牌形式,我可以将令牌字符串化,但当然我不能以格式使用它们
(这个特定的宏也不能输出格式!
调用)。@eggyal:啊,带格式的宏代码>很棘手。但有时,如果你能让编译器相信你的宏总是发出正确的代码,它们是可以做到的,如下所示。也许你可以就此提出一个问题?但这需要宏扩展为格式代码>调用,这是我不能做的(它是在项目位置调用的)。