【问题标题】:Can I use match inside format!() as a formatting string? [duplicate]我可以在 format!() 中使用 match 作为格式化字符串吗? [复制]
【发布时间】:2022-02-03 23:46:07
【问题描述】:

这就是我想要做的:

format!(match x { 0 => "Hello, {}", 1 => "Bye, {}" }, name);

它无法编译。解决办法是什么?

【问题讨论】:

  • 解决方案是让格式内部匹配,而不是相反。格式字符串必须是文字。

标签: rust


【解决方案1】:

format! 宏需要一个固定字符串literal 作为第一个参数(格式字符串)。宏在编译过程中被翻译成“正常”代码,因此必须在那个阶段解析和分析格式字符串,而不是在运行时。这就是为什么不能将运行时表达式作为格式字符串的原因。

你可以这样做:

let s = match x {
    0 => format!("Hello, {x}"),
    1 => format!("Bye, {x}"),
    _ => panic!("Unexpected value: {x}"),
};

【讨论】:

    【解决方案2】:
    let greeting = match x {
        0 => format!("Hello, {}", name),
        1 => format!("Bye, {}", name),
        _ => panic!(),
    };
    

    【讨论】:

      猜你喜欢
      • 2022-10-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      相关资源
      最近更新 更多