在rust中向字符串追加字符



这里的文档定义了一个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;

我假定您正在使用0.10文档和主构建。为了迎接动态大小类型的新世界,~str(又名Box<str>)不包含容量,而只包含长度,因此不能有效地推送到,因为每次都需要重新分配,这些方法已从OwnedStr中删除。现在您应该处理StrBuf,它具有类似push_char的方法。

最新更新