文档here定义了一个特征,其中包含一个方法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 :(得分:3)
我认为您正在使用0.10文档和主构建。为动态大小类型的勇敢新世界做准备,其中~str
(又名Box<str>
)不包含容量但仅包含长度和因此无法有效地推动,因为它需要每次重新分配those methods have been removed from OwnedStr
。现在你应该处理StrBuf
而不是push_char
。