作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试检索 FLTK-RS Widget 周围的 Arc Mutex 包装器的内部值:
pub struct ArcWidget<T: Clone + WidgetExt + WidgetBase>(Arc<Mutex<T>>);
impl<T: Clone + WidgetExt + WidgetBase> ArcWidget<T>{
pub fn widg(&self)->T{
let lock = self.0.clone();
let lock2 = lock.into_inner().unwrap();
lock2
}
pub fn redraw(&self){
let mut widg = self.0.lock().unwrap();
widg.redraw();
}
}
但是,这会导致错误:
let lock = self.0.into_inner().unwrap().clone();
cannot move out of an `Arc` - move occurs because value has type `Mutex<T>`, which does not implement the `Copy` trait
我想添加
Clone
特质限制可以解决这个问题,但显然没有。我该如何解决这个错误?
WidgetExt
+
WidgetBase
与
Copy
不兼容,所以我不能添加
Copy
性状限制。
最佳答案
对于 pub fn widg(&self) -> T {
要工作,有必要制作 T
的完整克隆。值(value)。有了你的问题的所有界限,这看起来像这样:
pub fn widg(&self) -> T {
self.0.lock().unwrap().clone()
}
但这不太可能是您真正想要的。看起来你可能真正想要的是这样的:
pub fn widg(&self) -> &Mutex<T> {
&self.0
}
因为然后任何地方的代码都可以做
let mut widg = self.widg().lock().unwrap();
widg.redraw();
或在内部小部件上调用任何其他方法。
关于rust - 无法将内值移出Arc rust ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68042132/
我正在做一个项目,我的 android 在这个项目中作为一个网络服务器工作;输入带端口号的 IP 地址,打开 Web 界面,用户可以将文件上传到手机。我想在 Web 界面上显示一些图片,以便我们的界面
我是一名优秀的程序员,十分优秀!