顺便说一句,这是针对当前的0.6Rust 主干的,不确定确切的提交时间.

假设我想在一些字符串上 for each 字符串指定一个参数,我的闭包采用一个borrow 的字符串指针参数(&str).我希望我的闭包将其参数添加到要返回的所有字符串~[~str]的所有向量中.我对Rust 的理解很弱,但我认为字符串是一种特殊情况,不能用*go 引用它们,对吗?如何从&str转换为向量的push方法,该方法采用~str?

下面是一些无法编译的代码

fn read_all_lines() -> ~[~str] {
    let mut result = ~[];
    let reader = io::stdin();
    let util = @reader as @io::ReaderUtil;
    for util.each_line |line| {
        result.push(line);
    }
    result
}

它不会编译,因为它推断出结果的类型是[&str],因为这就是我要讨论的.更不用说它的生命周期将是错误的,因为我正在向它添加一个生命周期 较短的变量.

我意识到我可以使用ReaderUtil的read_line()方法返回一个~str.但这只是一个例子.

那么,如何从借来的字符串中获得一个自有字符串呢?还是我完全误解了.

推荐答案

你应该调用StrSlice trait的方法,比如:

fn read_all_lines() -> ~[~str] {
    let mut result = ~[];
    let reader = io::stdin();
    let util = @reader as @io::ReaderUtil;
    for util.each_line |line| {
        result.push(line.to_owned());
    }
    result
}

StrSlice特征文件如下:

http://static.rust-lang.org/doc/core/str.html#trait-strslice

Rust相关问答推荐

当rust中不存在文件或目录时,std::FS::File::Create().unwire()会抛出错误

如何格式化传入Rust中mysql crate的Pool::new的字符串

我可以在不收集或克隆的情况下,将一个带有Item=(key,val)的迭代器拆分成单独的key iter和val iter吗?

如何修复&q;无法返回引用函数参数的值在异步规则中返回引用当前函数&q;拥有的数据的值?

减少指示ProgressBar在Rust中的开销

使用 select 处理 SIGINT 和子等待!无阻塞

Const 上下文:从 init 函数创建具有 const 通用长度的数组

tokio::sync::broadcast::Receiver 不是克隆

为什么 js_sys Promise::new 需要 FnMut?

write_buffer 不写入缓冲区而是输出零 WGPU

std mpsc 发送者通道在闭包中使用时关闭

为什么我可以使用 &mut (**ref) 创建两个实时 &mut 到同一个变量?

为什么 `tokio::join!` 宏不需要 Rust 中的 `await` 关键字?

Rust 中的let是做什么的?

如何在 Rust 中编写修改 struct 的函数

TinyVec 如何与 Vec 大小相同?

如何用另一个变量向量置换 rust simd 向量?

如何将 u8 切片复制到 u32 切片中?

在 macro_rules 中转义 $ 美元符号

这个 match 语句的默认值应该是什么,还有一种方法可以解开 Some case (chess in rust)