簡體   English   中英

轉換選項<impl trait>到一個選項<box<dyn trait> &gt; </box<dyn></impl>

[英]Converting an Option<impl Trait> to an Option<Box<dyn Trait>>

是否可以 map 將Option<impl Trait>轉換為Option<Box<dyn Trait>> 如果new()的參數不是Option ,則可以使用Some(Box::new(item))將其分配給struct 為什么這行得通而 map 不行?

trait TestTrait {}

impl TestTrait for i32 {}

struct TestStruct {
    item: Option<Box<dyn TestTrait>>
}

impl TestStruct {
    pub fn new(item: Option<impl TestTrait + 'static>) -> Self {
        let item: Option<Box<dyn TestTrait>> = item.map(|i| Box::new(i));
        Self {
            item
        }
    }
}


fn main() {    
    let num:i32 = 0;
    let s = TestStruct::new(Some(num));
}

看起來編譯器無法推斷出正確的閉包類型。 如果您明確指定它,那么一切正常( 操場):

trait TestTrait {}

impl TestTrait for i32 {}

struct TestStruct {
    item: Option<Box<dyn TestTrait>>
}

impl TestStruct {
    pub fn new(item: Option<impl TestTrait + 'static>) -> Self {
        let item = item.map(
            |i| -> Box<dyn TestTrait> {
                Box::new(i)
            }
        );
        Self {
            item
        }
    }
}

fn main() {    
    let num:i32 = 0;
    let _ = TestStruct::new(Some(num));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM