私は引数として&Any
をとるクロージャを返そうとしています。次のコードはコンパイラエラーを返します。非スカラーキャスト: `Box <FnMut<&Any>>`
trait Selector {
fn id(&self) -> i64;
fn selector(&self) -> Box<FnMut(&Any, &mut Any)>;
}
struct TypedSelector<TSource, TTarget> {
id: i64,
select: Box<FnMut(&TSource, &mut TTarget)>,
}
impl<TSource, TTarget> Selector for TypedSelector<TSource, TTarget>
where TSource: 'static,
TTarget: 'static
{
fn id(&self) -> i64 {
self.id
}
fn selector(&self) -> Box<FnMut(&Any, &mut Any)> {
self.select as Box<FnMut(&Any, &mut Any)>
}
}
コンパイルエラーは以下の通りである:
error: non-scalar cast: `Box<for<'r, 'r> std::ops::FnMut(&'r TSource, &'r mut TTarget) + 'static>` as `Box<for<'r, 'r> std::ops::FnMut(&'r std::any::Any + 'static, &'r mut std::any::Any + 'static)>`
--> src\main.rs:190:9
|
190 | self.select as Box<FnMut(&Any, &mut Any)>
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
私はいくつかの種類の注釈足りませんか?
私は 'unwrap'が魅力的である、しかし、それは代わりに' expect'を使用するために新規参入を教えるために最善であるかもしれないものを知っています。結局何が間違っていたのかを診断します。 @MatthieuM。 –
。良い点が更新されました。 –