gpt4 book ai didi

rust - 为什么不能在运行时安全地生成 fmt::Arguments?

转载 作者:行者123 更新时间:2023-12-03 11:29:41 26 4
gpt4 key购买 nike

core::fmt::Arguments 的文档状态:

This structure represents a safely precompiled version of a format string and its arguments. This cannot be generated at runtime because it cannot safely be done, so no constructors are given and the fields are private to prevent modification.


在运行时生成这样一个无法安全完成的结构究竟是什么?

最佳答案

其实我觉得这句话有点误导。您可以创建 Arguments 的值在运行时使用 format_args! .你不能做的是建立一个 Arguments使用任意字符串格式表达式。
这是因为主要不变量保留在 Arguments 中。是:

  • 每个占位符都有一个参数。
  • 每个参数至少使用一次。
  • 每个参数都实现了正确的特征,每个参数都实现了正确的特征。

  • 例如,如果您的字符串格式是 "{0}{1:?}{2:x}{2:X}"那么你必须有三个参数:第一个必须实现 Display ,第二个 Debug第三个 LowerHex + UpperHex .
    您可以创建一个 API 来构建 Arguments在运行时使用此类不变量,但不使用非常量格式字符串。因为你怎么知道需要什么特征?那有什么意义呢?如果你想格式化你的对象而不是使用字符串格式,没有理由需要 Arguments首先。
    通过要求字符串是文字,宏 format_args!可以在编译期间检查参数是否实现了正确的特征。

    关于rust - 为什么不能在运行时安全地生成 fmt::Arguments?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64394111/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com