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