无法借用RefCell中的TlsStream可变

问题描述

我有一个包含RefCell的结构,该结构包装了Tlsstream<Tcpstream>。我测试了将Tlsstream<IO>替换为i32并能够变异struct成员,但是使用流时编译器错误。尝试写入时出现以下错误

error[E0596]: cannot borrow data in a `&` reference as mutable
  --> src/main.rs:18:9
   |
18 | /         self.i
19 | |             .tcp4_stream
20 | |             .borrow_mut()
21 | |             .as_ref()
22 | |             .unwrap()
   | |_____________________^ cannot borrow as mutable

MCVE:

[package]
name = "mvce"
version = "0.1.0"
authors = ["Joshua Abraham <sinisterpatrician@gmail.com>"]
edition = "2018"

# See more keys and their deFinitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
async-std = "1.6.3"
async-tls = "0.9.0"
use async_std::net::Tcpstream;
use async_std::prelude::*;
use async_tls::client::Tlsstream;
use std::{cell::RefCell,rc::Rc};

#[derive(Default,Clone)]
struct Client {
    i: Rc<ClientInternal>,}

#[derive(Default)]
struct ClientInternal {
    tcp4_stream: RefCell<Option<Tlsstream<Tcpstream>>>,}

impl Client {
    async fn send(&self) {
        self.i
            .tcp4_stream
            .borrow_mut()
            .as_ref()
            .unwrap()
            .write_all(b"Hello World!")
            .await;
    }
}

fn main() {
    println!("Hello,world!");
}

如何在这里利用内部可变性?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)