【发布时间】:2022-03-19 04:27:41
【问题描述】:
我想定义一个HashMap,键类型为String,值类型是它本身。
我试着写这样的东西:
HashMap<String, HashMap<String, ...>>
我发现这需要递归,但我不知道如何在类型中编写递归。
看完Recursive generic types,我试过了:
type HashToHash = HashMap<String, HashToHash>
但是我得到了错误:
error[E0391]: cycle detected when processing `HashToHash`
--> src/lib.rs:3:35
|
3 | type HashToHash = HashMap<String, HashToHash>;
| ^^^^^^^^^^
|
= note: ...which again requires processing `HashToHash`, completing the cycle
有没有办法在 Rust 中定义这种类型?
【问题讨论】:
-
试试
struct HashToHash(HashMap<String, HashToHash>);。 -
副本是错误的。
HashTable就像一个盒子,所以你可以有一个递归结构。 -
@trentcl 当然,它没有理由不起作用。
HashMap的大小在编译时已知,它与键和值类型无关,因此在标记为重复的问题中提到的无限大小类型的问题在这里不会出现。仍然存在一个问题,这种类型有多有用,因为叶节点中不能有任何值,但我不能排除这种数据结构的用例。 -
@trentcl 够公平的。它actually does work。 :)
标签: generics recursion types rust