在Rust中,如何将借入的值保留到struct的文件中?

我只是想用 tokio::net::TcpStream.split 方法,并将其作为字段变量保留下来,但我得到了错误信息 error[E0597]: 'stream' does not live long enough. 当我试图将一个借来的值保存到struct的字段中时,我多次遇到这样的问题,例如 Struct std::path::Path. 我知道 Path 搭配使用 PathBuf但这次我不确定。你能给我一个建议让它工作吗?

use tokio::net::TcpStream;
use tokio::net::tcp::{ReadHalf, WriteHalf};

struct TT<'a>{
    pub reader: Option<ReadHalf<'a>>,
    pub writer: Option<WriteHalf<'a>>,
}

impl<'a> TT<'a> {
    fn set_reader_and_writer(&mut self, mut stream: TcpStream) {
        let (reader, writer) = stream.split();
        self.reader = Some(reader);
        self.writer = Some(writer);
    }
}
$ cargo build                                                                                                                                                                    [master|…4]
    Blocking waiting for file lock on build directory
   Compiling tcpst v0.1.0 (/tmp/tcpst)
error[E0597]: `stream` does not live long enough
  --> src/main.rs:11:32
   |
9  | impl<'a> TT<'a> {
   |      -- lifetime `'a` defined here
10 |     fn set_reader_and_writer(&mut self, mut stream: TcpStream) {
11 |         let (reader, writer) = stream.split();
   |                                ^^^^^^ borrowed value does not live long enough
12 |         self.reader = Some(reader);
   |         -------------------------- assignment requires that `stream` is borrowed for `'a`
13 |         self.writer = Some(writer);
14 |     }
   |     - `stream` dropped here while still borrowed

error: aborting due to previous error

For more information about this error, try `rustc --explain E0597`.
error: could not compile `tcpst`.

解决方案:

问题在于,流的读和写两半都借用了对它们所创建的流的引用。 在你的代码中,原始流在函数结束时被丢弃,这将使这些引用无效。 最简单的解决方法是将函数的签名改为 set_reader_and_writer 摄取 &mut stream 而不是掌握所有权。

这是个非常可以理解的错误,因为签名为 “我”。split 不明确其寿命(即 stream 必须至少和返回值一样长)。) 如果你检查 本源不过,它显示了 ReadHalfWriteHalf 寿命(以及为什么允许从函数签名中省略)。

给TA打赏
共{{data.count}}人
人已打赏
未分类

javascipt es6迭代器懒惰评估在内存中是如何操作的?

2022-9-9 5:52:18

未分类

将管理员邮箱设置为WooCommerce取消和失败订单的BCC。

2022-9-9 5:52:20

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索