3

ボックス化されたクロージャーを使用しているときに、次の問題に遭遇しました。

type Test = Rc<dyn Fn() -> i64>;

fn test_bad() -> Test {
    Test::new(|| 42)
}

fn test_good() -> Test {
    Rc::new(|| 42)
}

最初のケースでは、型エイリアスを使用してnewメソッドを参照していRcますが、2 番目のケースでは直接使用しています。

最初のケースでは、コンパイラは文句を言います:

    |       Test::new(|| 42)
    |             ^^^ function or associated item not found in `Rc<(dyn Fn() -> i64 + 'static)>`
    |
    = note: the method `new` exists but the following trait bounds were not satisfied:
            `dyn Fn() -> i64: Sized`

しかし、2 番目のケースは問題なく動作します。誰かが違いを説明できますか?タイプエイリアスを介して参照する方法はありますかnew、それとも自分でラップする必要がありますか?

4

2 に答える 2