gpt4 book ai didi

rust - 装箱选项的简洁方法

转载 作者:行者123 更新时间:2023-11-29 08:22:26 25 4
gpt4 key购买 nike

有没有更简洁的方法可以实现以下?

fn boxed_option<T>(thing: Option<T>) -> Option<Box<T>> {
match thing {
Some(x) => Some(Box::new(x)),
None => None,
}
}

最佳答案

是的:

thing.map(Box::new)

我强烈建议记住 Iterator 上的所有方法, OptionResult因为它们在 Rust 中被广泛使用。 OptionResult每种方法的固有方法都少于 25 种,其中许多方法在这两种类型之间有很大的重叠。至少阅读所有这些以了解可用的内容并记住它们。您随时可以再次打开文档以找到确切的名称。


I actually can't quite get this to work.

fn function_2<F>(foo: Option<F>)
where F: 'static + FnMut()
{
let tmp: Option<Box<FnMut()>> = foo.map(Box::new);
}
error[E0308]: mismatched types
--> src/main.rs:14:37
|
14 | let tmp: Option<Box<FnMut()>> = foo.map(Box::new);
| ^^^^^^^^^^^^^^^^^ expected trait std::ops::FnMut, found type parameter
|
= note: expected type `std::option::Option<Box<std::ops::FnMut()>>`
= note: found type `std::option::Option<Box<F>>`

这里的原始代码不仅仅是将一种类型转换为另一种类型,它还创建了一个特征对象。我不能确定为什么允许隐式创建特征对象的形式,而这不是:

foo.map(|f| Box::new(f));

但是,您可以这样说:

foo.map(|f| Box::new(f) as Box<FnMut()>);

(当然不需要指定变量的类型)。


迂腐地,“装箱 Option ”将是 Box<Option<T>> .

关于rust - 装箱选项的简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41201368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com