gpt4 book ai didi

rust - 有没有一种方法可以注释一个在rust中采用可选闭包的函数?

转载 作者:行者123 更新时间:2023-12-03 11:41:57 26 4
gpt4 key购买 nike

我有一个函数,它带有一个可选的闭包,并根据返回值修改结构。

例如:

fn main() {
let mut s = Struct::<usize> { inner: None };
do_something(Some(|x:String|x.len()), &mut s);
println!("{:?}",s);
let mut s = Struct::<usize> { inner: None };
do_something(None, &mut s);

println!("{:?}",s);
}

fn do_something<P, T: Fn(String) -> P>(fun: Option<T>, s: &mut Struct<P>) {
*s = Struct {
inner: fun.map(|fun| fun(String::from("abc")))
};
}

#[derive(Debug)]
struct Struct<P> {
inner: Option<P>
}

这应该打印:
Struct { inner: Some(3) }
Struct { inner: None }

但是现在它不能编译了,因为 cannot infer type for type parameter T declared on the function do_something
好吧,让我们尝试:
  let empty_function: Option<dyn Fn(String) -> usize> = None;
do_something(empty_function, &mut s);

另外,由于 empty_function的大小不正确,因此不起作用。

有没有一种方法可以注释do_something,从而可以在没有 Box的情况下工作?

最佳答案

您可以使用None指定None::<T>的类型,并且可以使用函数指针(fn而不是dyn Fn)作为基本大小的指针:

do_something(None::<fn(String) -> usize>, &mut s);

关于rust - 有没有一种方法可以注释一个在rust中采用可选闭包的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61784991/

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