Reference 无法移出借用内容/无法移出共享引用后面
我不理解错误Reference 无法移出借用内容/无法移出共享引用后面,reference,rust,move-semantics,borrow-checker,Reference,Rust,Move Semantics,Borrow Checker,我不理解错误无法移出借用的内容。我已经收到过很多次了,我一直都在解决它,但我一直不明白为什么 例如: for line in self.xslg_file.iter() { self.buffer.clear(); for current_char in line.into_bytes().iter() { self.buffer.push(*current_char as char); } println!("{}", line); } 产
无法移出借用的内容。我已经收到过很多次了,我一直都在解决它,但我一直不明白为什么
例如:
for line in self.xslg_file.iter() {
self.buffer.clear();
for current_char in line.into_bytes().iter() {
self.buffer.push(*current_char as char);
}
println!("{}", line);
}
产生错误:
错误[E0507]:无法移出借用的内容
-->src/main.rs:31:33
|
31 |对于行中的当前_字符,转换为_字节().iter(){
|^^^^无法移出借用的内容
在更新版本的Rust中,错误是
error[E0507]:无法移出共享引用后面的“*行”
-->src/main.rs:31:33
|
31 |对于行中的当前_字符,转换为_字节().iter(){
|^^^^之所以发生移动,是因为“*line”的类型为“std::string::string”,它没有实现“Copy”特性
我通过克隆行
解决了这个问题:
for current_char in line.clone().into_bytes().iter() {
即使阅读了其他帖子,我也不理解这个错误,比如:
这类错误的根源是什么?让我们看看签名:
你看过了吗?(顺便说一句,字符串提供了.bytes()
方法。)是的,我看过了,但不明白:(我的字符串是std::string::string,根据文档,没有.bytes()方法它被称为。as_bytes()
事实上,谢谢你,它与as_bytes()一起工作)
没有克隆。但我仍然不明白为什么?String
从str
获取方法。
fn into_bytes(self) -> Vec<u8>
struct IteratorOfStringReference<'a>(&'a String);
impl<'a> Iterator for IteratorOfStringReference<'a> {
type Item = &'a String;
fn next(&mut self) -> Option<Self::Item> {
None
}
}
struct FileLikeThing {
string: String,
}
impl FileLikeThing {
fn iter(&self) -> IteratorOfStringReference {
IteratorOfStringReference(&self.string)
}
}
struct Dummy {
xslg_file: FileLikeThing,
buffer: String,
}
impl Dummy {
fn dummy(&mut self) {
for line in self.xslg_file.iter() {
self.buffer.clear();
for current_char in line.into_bytes().iter() {
self.buffer.push(*current_char as char);
}
println!("{}", line);
}
}
}
fn main() {}