gpt4 book ai didi

rust - 在FnOnce中使用struct代替函数

转载 作者:行者123 更新时间:2023-12-03 11:33:54 25 4
gpt4 key购买 nike

该程序将编译并成功运行。

#[derive(Debug)]
struct MyError(i32);

fn main() {
let m: Result<(), MyError> = Err(3).map_err(MyError);
println!("{:?}", m); // output: Err(MyError(3))
}
map_err的签名是
pub fn map_err<F, O: FnOnce(E) -> F>(self, op: O) -> Result<T, F>
我期望一个 FnOnce,我相信该类型应该是一个函数/闭包。该结构可以在此处成功使用的原因是什么?

最佳答案

因为在定义元组结构时,它会定义相应的类型以及构造函数(即函数),因为为什么不这样。 You can actually check this using the compiler,元组struct构造函数甚至都不是像函数一样的怪异项目,它就像您将使用fn(或非闭包匿名函数)定义的任何函数一样,都是函数指针。
两者都具有相同的名称,但是位于不同的 namespace 中,一个是“类型 namespace ”,另一个是“函数 namespace ”。
更为清晰的版本是enum tuple构造函数,因为类型与其构造函数之间没有混淆:https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=d76337f3301927cfca67200b64dfa89c,但原理是相同的。

关于rust - 在FnOnce中使用struct代替函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63916049/

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