我正在try 使用clap创建一个CLI应用程序.ACommandconstructor是这样的:

impl Command {
    pub fn new(name: impl Into<Str>) -> Self {...}
}

但我需要向那里传递一个从共享.so库加载的名称.我可以使用它的唯一方式是:

let mut registry = Registry::new();
registry.load("./libapp_addon_no1.so").ok();
registry.load("./libapp_addon_no2.so").ok();

for command in registry.commands() {
    // command.name is a String
    cli = cli.subcommand(Command::new(&*command.name.clone().leak()));
}

这是可行的,但有没有更好的方法从String的副本中产生Into<Str>呢?

推荐答案

Str人起:

NOTE:要支持动态值(即String),请启用string功能

您可以使用Cargo添加string功能:

cargo add clap -F string

或者,您可以手动编辑Cargo.toml:

[dependencies]
clap = { version = "4.4.18", features = ["string"] }

Rust相关问答推荐

如何将元素添加到向量并返回对该元素的引用?

创建包含缺失值的框架

当两者都有效时,为什么Rust编译器建议添加';&;而不是';*';?

为什么`Vec i64`的和不知道是`Option i64`?

为潜在的下游实现使用泛型绑定而不是没有泛型绑定的trait

铁 rust 中的泛型:不能将`<;T作为添加>;::Output`除以`{Float}`

RUST应用程序正在退出,错误代码为:(退出代码:0xc0000005,STATUS_ACCESS_VIOLATION)

正则表达式中的重叠匹配?(铁 rust 正则式发动机)

异步函数返回的future 生存期

为什么 `Deref` 没有在 `Cell` 上实现?

为什么 GAT、生命周期和异步的这种组合需要 `T: 'static`?

我们可以在 Rust 切片中使用步骤吗?

如何从borrow 的异步代码运行阻塞代码?

如何将这些测试放在一个单独的文件中?

为什么我不能克隆可克隆构造函数的Vec?

在每个循环迭代中删除borrow

将原始可变指针传递给 C FFI 后出现意外值

Rust,我如何正确释放堆分配的内存?

Cargo:如何将整个目录或文件包含在功能标志中?

来自外部函数的future 内部可变引用