8 个版本

0.2.2 2023年12月3日
0.2.1 2023年2月3日
0.2.0 2022年12月6日
0.1.4 2022年8月15日

#187 in Rust 模式

Download history 1992/week @ 2024-04-14 2323/week @ 2024-04-21 774/week @ 2024-04-28 1209/week @ 2024-05-05 1879/week @ 2024-05-12 980/week @ 2024-05-19 3242/week @ 2024-05-26 4383/week @ 2024-06-02 3773/week @ 2024-06-09 5795/week @ 2024-06-16 3967/week @ 2024-06-23 3387/week @ 2024-06-30 5468/week @ 2024-07-07 3035/week @ 2024-07-14 4799/week @ 2024-07-21 4698/week @ 2024-07-28

18,710 每月下载量
9 个 (2 直接) crate 中使用

MIT/Apache

39KB
829

formatx

一个用于在 Rust 中运行时格式化非字面字符串的宏。

formatx 是一个无依赖项的字符串模板库,其语法源自 std::fmt。formatx 导出 formatx! 宏,该宏类似于 format! 宏。formatx 的工作原理是首先解析模板字符串,然后它使用 format! 宏内部来复制其行为。formatx 旨在格式化字符串和数字,尽管也可以格式化通用的类型,如 struct

入门

将其添加到您的 Cargo.toml 文件中。

[dependencies]
formatx = "0.2.2"

或从命令行添加。

$ cargo add formatx

查看 文档示例 了解如何使用它。

示例

来源: 使用非字面字符串格式化

use formatx::formatx;

fn message(language: &str, name: &str, number: i32) -> String {
    let s = match language {
        "french" => "Bonjour {}, le nombre est {}",
        "spanish" => "Hola {}, el numero es {}",
        _ => "Hi {}, the number is {}",
    };
    formatx!(s, name, number).unwrap()
}

fn main() {
    println!("{}", message("french", "Léa", 1));
    println!("{}", message("spanish", "Sofia", 2));
    println!("{}", message("english", "Ashley", 3));
}

输出

Bonjour Léa, le nombre est 1
Hola Sofia, el numero es 2
Hi Ashley, the number is 3

限制

警告 下面给出的示例将始终崩溃。

  1. 仅支持实现 Display + Debug 特质的类型。其他 格式化特质 不受支持。

  2. 不支持局部变量插值。

let people = "Rustaceans";
formatx!("Hello {people}!").unwrap();
  1. 不支持混合两种类型的 位置 参数。
formatx!("{1} {} {0} {}", 1, 2).unwrap();
  1. 不支持通过 $ 符号参数进行参数设置。
formatx!("{:width$}!", "x", width = 5).unwrap();
  1. 不能使用星号 .* 设置 精度
formatx!("{:.*}", 5, 0.01).unwrap();

替代方案

  1. strfmt
  2. runtime-fmt

许可证

双重许可

无运行时依赖