是否可以将Option<impl Trait>
映射到Option<Box<dyn Trait>>
? 如果new()
的参数不是Option
,则可以将其分配给具有Some(Box::new(item))
的struct
。 为什么这样可以工作而映射不能呢?
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));
}
Box::new(i) as Box<dyn TestTrait>
这样写也足以防止编译器过度推断类型。 - user2722968Box::new::<turbofish>
来移除闭包,但没有成功。 - MaxV