是否可以将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));
}发布于 2021-01-07 06:37:20
看起来编译器无法推断出闭包的正确类型。如果您显式指定它,则一切正常(playground):
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));
}https://stackoverflow.com/questions/65604092
复制相似问题