Rust 中的内置对象

アレッ*_*ックス 2 rust

Rust 没有内置Object类型,我认为是这样吗?如果是这样,我该如何创建一个“某物”的 HashMap,在 Java 中将是Object

  fn method1(my_hash_map: HashMap<&str, ???>) { ... } // Rust
  void method1(Map<String, Object> myMap) { ... } // Java
Run Code Online (Sandbox Code Playgroud)

小智 5

如果您想要一个可以混合许多不同类型的值的 HashMap,则必须使用Any. 最直接的等价物Map<String, Object>HashMap<String, Box<Any>>. 我之所以改用 Java,&strString因为&str没有生命周期可能不是你想要的,而且无论如何,它String比 Rust更远离 Java String

但是,如果您根本不关心值的类型,那么使通用更简单、更有效method1

fn method1<T>(my_hash_map: HashMap<String, T>) { ... }
Run Code Online (Sandbox Code Playgroud)

当然,您还可以添加约束T:Trait以对值执行更有趣的操作(参见Object允许相等比较和散列)。

  • @AlexanderSupertramp `Any` 是一种特征,而不是具体类型。它没有已知的大小,因此您无法像类型的默认值那样按值存储它。Java 中也是如此,但这并不重要,因为无论如何,所有对象都是通过引用/指针访问的。在 Rust 中,有多种类型的指针,所以你需要决定使用哪一种:还有 `​​&amp;'a Any`,以及即将推出的 `Rc&lt;Any&gt;`、`Arc&lt;Any&gt;` 等。 (3认同)