相关疑难解决方法(0)

如果BufReader取得流的所有权,我该如何读取和写入行?

我想从a读取一行TCPStream,再写一行,然后重复.问题是BufReader::new获取我的TCPStream变量的所有权:

let stream = ...; // TCPStream

let reader = BufReader::new(stream); // moved its value

// can't use stream here anymore
Run Code Online (Sandbox Code Playgroud)

什么是简单的解决方案?

tcp tcp-ip rust

14
推荐指数
2
解决办法
1810
查看次数

为什么serde_json :: from_reader取得了读者的所有权?

我的代码:

fn request_add<T>(request: &mut Request, collection_name: &'static str) -> Fallible<Fallible<String>>
where
    T: serde::Serialize + serde::de::DeserializeOwned,
{
    let add_dao = dao::MongoDao::new(collection_name);
    let obj = serde_json::from_reader::<Body, T>(request.body)?; //cannot move out of borrowed content
    Ok(add_dao.add(&obj))
}
Run Code Online (Sandbox Code Playgroud)

我有一个cannot move out of borrowed content错误,因为request是一个参考,但为什么不serde_json::from_reader使用mut引用?为什么需要所有权?我该如何解决?

json rust serde

12
推荐指数
1
解决办法
302
查看次数

为什么我可以在引用上调用File.take()?

当我查看File文档时,我发现该take方法需要一个self,而不是一个&self.但是我仍然可以在借用的引用上调用该方法:

fn foo(file: &File) {
    let _ = file.take(1); // why does this work?
    println!("can still use the file: {:?}", file);
}
Run Code Online (Sandbox Code Playgroud)

我认为self通过所有权,但我甚至可以file在通话后使用take所以所有权显然留在里面foo.

如果我自己在带有方法的自定义结构上执行此操作,则它不起作用:

struct Foo;

impl Foo {
    fn foo(self: Foo) { }
}

fn main() {
    let foo = &Foo;
    foo.foo(); // error: cannot move out of borrowed content
}
Run Code Online (Sandbox Code Playgroud)

这完全是预料之中的.

同样根据文档,File据我所知,没有实现任何特殊的特征.引起我注意的是Read有一种by_ref()方法,但我没有称之为一切仍然有效.

这里发生了什么?(使用rustc 1.3.0-dev)

rust

4
推荐指数
1
解决办法
134
查看次数

标签 统计

rust ×3

json ×1

serde ×1

tcp ×1

tcp-ip ×1