通过将构造函数作为闭包参数传递给A
函数,可以初始化元组结构B
或枚举wrap
。
这不适用于结构D
,它已命名字段x
:
fn wrap<A, B, F>(item: A, f: F) -> B
where
F: Fn(A) -> B,
{
f(item)
}
#[derive(Debug)]
struct A<T>(T);
#[derive(Debug)]
enum B<T> {
C(T),
}
#[derive(Debug)]
struct D<T> {
x: T,
}
fn main() {
println!("{:?}", wrap(1, A)); // prints A(1)
println!("{:?}", wrap(1, B::C)); // prints C(1)
// println!("{:?}", wrap(1, D)); // sounds good, doesn’t work
}
是否有可能以某种方式使其适用于具有命名字段的结构?
答案 0 :(得分:3)
'没有命名字段的结构'不是完全结构而是元组结构。虽然元组结构的名称可以与函数名称一样使用,但结构名称不是这样。使用结构名称实例化一个结构,您必须指定参数的名称:
println!("{:?}", wrap(1, |i|(D { x: i }))); // doesn't sound good, but works