到弧>?,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));

但是,我使用Arcwith Mutex。例如:

let my_arc_type = Arc::new(Mutex::new("HelloWorld".to_string()));

value: Arc<dyn Any + Send + Sync>有可能沮丧Arc<Mutex<String>>吗?

标签: rust

解决方案


有什么问题?它立即起作用。

操场

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));
}

推荐阅读