我如何在Rust中转换&str到〜str?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

顺便说一句,这是针对目前RUST0.6的代码

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]

提问于
用户回答回答于

调用StrSlice特性:

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
}

用户回答回答于

你不能。

首先,它在语义上不起作用:~str时只有一次拥有一件东西. But a &str是借来的,那么你从哪里借来的呢?

另一方面,它不符合逻辑:~-指针和@-指针在完全不同的堆中分配,&不知道哪种堆,因此不能将其转换为~并且仍然保证底层数据生活在正确的地方。

所以你或许可以用read_line或者复制一份

扫码关注云+社区