Avatar ·

为什么Rust中存在独特的匿名类型以及如何处理它们?

大家好!我最近开始学习Rust,对匿名类型的概念有些困惑。我了解到,在Rust中,每个闭包字面量(closure)都有其独特的、不可命名的类型。例如,以下代码: ```rust let add_one = |x: i32| x + 1; let double = |x: i32| x * 2; ``` 我理解`add_one`和`double`是具有不同类型的闭包。但为什么要这样设计?在C++或其他语言中,我可以直接声明一个函数指针或使用`std::function`。为什么Rust要采用创建独特匿名类型的方式?我觉得这使编写泛型代码变得复杂,尤其是当我想将闭包传递给函数或将其存储在结构体中时。例如,我不能简单地写: ```rust fn apply(f: ???, x: i32) -> i32 { f(x) } ``` 我必须使用泛型(generics)或`Box`。这正常吗?还是我遗漏了什么?如何根据这一特性设计代码?希望得到带示例的解释。