ボックス化されたクロージャーを使用しているときに、次の問題に遭遇しました。
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
、それとも自分でラップする必要がありますか?