在Rust中将一个字符添加到字符串中

3

这里的文档定义了一个trait,其中包含一个名为push_char的方法,可以将字符附加到可变的self上。然而,以下代码会失败:

fn foo() {
  let mut s = "hey".to_owned();
  s.push_char('!');
}

尝试编译这个:

$ rustc --version
rustc 0.11-pre (e8053b9 2014-05-12 09:12:04 -0700)
host: x86_64-apple-darwin
$ rustc appendchar.rs
appendchar.rs:5:5: 5:19 error: type `~str` does not implement any method in scope named `push_char`
appendchar.rs:5   s.push_char('!');
                    ^~~~~~~~~~~~~~
error: aborting due to previous error

我们可以看到,s 的类型确实是 ~str,而根据文档,这种类型实现了 OwnedStr。那么为什么会失败呢?顺便说一下,添加以下代码行并不能解决它:
use std::str::OwnedStr;
1个回答

3
我假设您正在使用0.10文档和主版本构建。为了迎接动态大小类型的崭新世界,在这个世界中,~str(也就是Box<str>)不再包含容量,而只包含长度,因此无法高效地执行推入操作,因为每次都需要重新分配内存。因此,这些方法已从OwnedStr中删除。现在,您应该使用StrBuf,该结构拥有像push_char这样的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接