在结构中声明闭包时冲突定义使用
Conflicting defining use when declaring closure in a struct
我正在尝试创建一个包含多个可复制闭包的结构。
type ClosureType = impl Fn(u64) -> u64 + Clone;
fn closure_try(t: u64) -> ClosureType {
move |x: u64| x + t
}
fn closure_try_other(u: u64) -> ClosureType {
move |x: u64| x - u
}
#[derive(Clone)]
pub struct Wrapper {
pub h: Vec<ClosureType>
}
trait Tr: Clone {
fn dup(s: Self) -> (Self, Self);
}
impl Tr for Wrapper {
fn dup(c: Self) -> (Self, Self) {
(c.clone(), c)
}
}
但是此代码失败并出现 ClosureType
的错误:
rustc: concrete type differs from previous defining opaque type use
是否意味着这种方法不能用于存储多个不同的闭包?
type T = impl Trait
只是一种命名不透明类型的方法。它是一种存在类型,这意味着它只有一个具体定义。 ClosureType
是某种无法命名的类型,但它不能是 两个不同的 类型,原因相同 .
如果 Vec
需要多种类型,即 异构 集合,则必须使用动态调度,即 dyn Trait
.
我正在尝试创建一个包含多个可复制闭包的结构。
type ClosureType = impl Fn(u64) -> u64 + Clone;
fn closure_try(t: u64) -> ClosureType {
move |x: u64| x + t
}
fn closure_try_other(u: u64) -> ClosureType {
move |x: u64| x - u
}
#[derive(Clone)]
pub struct Wrapper {
pub h: Vec<ClosureType>
}
trait Tr: Clone {
fn dup(s: Self) -> (Self, Self);
}
impl Tr for Wrapper {
fn dup(c: Self) -> (Self, Self) {
(c.clone(), c)
}
}
但是此代码失败并出现 ClosureType
的错误:
rustc: concrete type differs from previous defining opaque type use
是否意味着这种方法不能用于存储多个不同的闭包?
type T = impl Trait
只是一种命名不透明类型的方法。它是一种存在类型,这意味着它只有一个具体定义。 ClosureType
是某种无法命名的类型,但它不能是 两个不同的 类型,原因相同
如果 Vec
需要多种类型,即 异构 集合,则必须使用动态调度,即 dyn Trait
.