0
タプル構造A
またはenum B
を初期化するには、コンストラクタをクロージャパラメータとしてwrap
関数に渡すことができます。構造体をクロージャを使用して初期化する
これはフィールドx
指名した構造体D
、動作しません:
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
}
それは何とかそれが名前のフィールドを持つ構造体のために動作させることは可能ですか?
でも短い:1つの構造体をインスタンス化するために構造体名を使用して、パラメータの名前を指定する必要があります 'ラップ(1、| X | D {X})のような名前のデータと' –
どうやら列挙型のバリアントこの 'enum A {B {x:T}}'も同じ方法で初期化する必要があります。 –
lukwol