rust - 是否可以向下转换 Arc到弧>?
问题描述
RustArc
有一个令人沮丧的特性:
use std::any::Any;
use std::sync::Arc;
fn print_if_string(value: Arc<dyn Any + Send + Sync>) {
if let Ok(string) = value.downcast::<String>() {
println!("String ({}): {}", string.len(), string);
}
}
let my_string = "Hello World".to_string();
print_if_string(Arc::new(my_string));
print_if_string(Arc::new(0i8));
但是,我使用Arc
with Mutex
。例如:
let my_arc_type = Arc::new(Mutex::new("HelloWorld".to_string()));
value: Arc<dyn Any + Send + Sync>
有可能沮丧Arc<Mutex<String>>
吗?
解决方案
有什么问题?它立即起作用。
use std::any::Any;
use std::sync::Arc;
use std::sync::Mutex;
fn print_if_mutex(value: Arc<dyn Any + Send + Sync>) {
if let Ok(mutex) = value.downcast::<Mutex<String>>() {
if let Ok(string) = mutex.lock() {
println!("String ({}): {}", string.len(), string);
}
}
}
fn main(){
let my_string = "Hello World".to_string();
print_if_mutex(Arc::new(Mutex::new(my_string)));
print_if_mutex(Arc::new(0i8));
}
推荐阅读
- asp.net - 如何在 ASP.Net 应用程序的 react.js 前端处理身份验证状态
- ruby - Ruby Nokogiri 抓取数据 URL
- django - Django 为管理员和员工用户建模清洁方法
- c++ - Makefile 创建两个库 - 一个依赖于另一个
- android - android NDK致命错误:stdio.h:没有这样的文件或目录#include
- java - Java 盒子的最大体积 --objects/array
- vue.js - 通过 Vue Computed Setter 调用 Vuex Action
- javascript - 未设置本机基本输入参考
- winforms - SharpGL - 用网格绘制球体并为每个球体附加颜色
- ffmpeg - FFMPEG - 将像素格式从 24 位 RGB 更改为 8 位灰度只会改变颜色,但不会改变文件大小