![](/img/trans.png)
[英]How to use `Fn` trait with return type of `impl trait` in Rust?
[英]How to return a closure which returns an impl trait in Rust
我正在使用德鲁伊 ui 套件,这正在工作
fn build_list_item() -> impl Widget<TodoItem> {
Flex::row()
.with_child(Checkbox::new("").lens(TodoItem::completed))
.with_flex_child(
Label::new(|item: &TodoItem, _: &_| item.description.clone()),
1.0,
)
}
// and then
List::new(|| build_list_item())
但我想实现这个
List::new(build_list_item())
所以我像这样修改了function
fn build_list_item() -> impl Fn() -> impl Widget<TodoItem> {
|| {
Flex::row()
.with_child(Checkbox::new("").lens(TodoItem::completed))
.with_flex_child(
Label::new(|item: &TodoItem, _: &_| item.description.clone()),
1.0,
)
}
}
并得到编译器错误
error[E0562]: `impl Trait` not allowed outside of function and method return types
--> src/main.rs:33:39
|
33 | fn build_list_item2() -> impl Fn() -> impl Widget<TodoItem> {
| ^^^^^^^^^^^^^^^^^^^^^
如何解决?
因为在编译时不知道返回的Widget
的大小您可以使用以下解决方案:
fn build_list_item() -> impl Fn() -> Flex<TodoItem> {
&|| {Flex::row()
.with_child(Checkbox::new("").lens(TodoItem::completed))
.with_flex_child(
Label::new(|item: &TodoItem, _: &_| item.description.clone()),
1.0,
)}
}
// and then
List::new(build_list_item());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.