将字符串转换为 &str Rust 而不会导致借用问题

  • 本文关键字:问题 转换 字符串 Rust str rust
  • 更新时间 :
  • 英文 :


有没有办法将String(函数参数(转换为&str(用于返回值(,同时避免借用问题或引用临时值。

下面是一个示例用例:

PS:我被现有函数约束为这些类型,不能只更改函数参数的类型,也不能更改其&str消耗返回值。以下示例还使用clap::Arg::new来强调这一方面

// f is any iterator over String values, for example sake I am using Vec<String> with literal value which does not represent the real case.
let f: Vec<String> = vec!["A".into(),"B".into(),"C".into()].into_iter();
let arg: clap::Arg = f.map(|s: String|{
clap::Arg::new(s.as_str())
});

有没有办法将String(函数参数(转换为&str(用于返回值(,同时避免借用问题或引用临时值。

没有,但确实没有。

"否":如果您的参数是String,则该函数拥有String,这意味着一旦该函数退出,就会回收String,因此任何对其的引用都将无效,因为它将处于悬空状态。

"但是"是":您可以将String转换为Box<str>,然后再将其转换成leak。这将返回一个&'static str,它将永远存在

"但是,实际上,没有":虽然就Rust而言,内存泄漏是安全的,但它仍然是内存泄漏。在某些情况下,这可能是好的(例如,在短期运行的过程中,明确释放是对资源的浪费,或者某些形式的临时实习(,但总的来说,这确实是一种糟糕的做法。

最新更新