场景是想自定义一个结构体 HttpClient 用于请求网络资源,模块内共享这个实例变量,这个变量根据操作会发生变化,第一个想到用 Arc<RefCell>,但有个问题,就是 Arc 变量需要先初始化,而我自定义的 HttpClient 需要根据用户输入的参数来调用 HttpClient::new(...) 来创建实例,这种一般怎么解决?总不能为了初始化给 HttpClient 实现 Default trait 吧?
1
PTLin Aug 17, 2023
|
4
none OP @PTLin OnceLock 只能初始化一次,我的需求里 HttpClient 这个实例会根据用户操作重新初始化并覆盖之前的变量,其实用 Arc<Mutex> 也能解决这个问题,只不过 Arc<Mutex> 初始化的时候需要有默认值,不太想 new 一个空的 HttpClient 实例。
|
5
PTLin Aug 19, 2023 @none InitCell 也是只能 set 一次呀,你要是说那个 reset 的话你看看代码就知道怎么实现的了。
算了我给你写个你这种情况常用的方法吧: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=b9dad8543dc9f982a7485d23a9a69eb1 |