enum Direction { NORTH, SOUTH, EAST, WEST, }
for direction in Direction::iter() { println!("{:?}", direction); }
类似这样的
最好简单一点的 有没有这种东西 貌似没找到
1
共 12 条评论, 1 页
enum Direction { NORTH, SOUTH, EAST, WEST, }
for direction in Direction::iter() { println!("{:?}", direction); }
类似这样的
最好简单一点的 有没有这种东西 貌似没找到
评论区
写评论用strum库即可
用const定义enum option的数量,但也要同时实现From数字类型到enum的类型转换,这样可以通过遍历数字来便利enum。
--
👇
githik999: 要是用这种const方式的话感觉很痛苦啊...特别这个enum很长的时候 不是要写两遍?而且增删也很不方便 现在只能先用第三方库了.第三方库自己又引入了好多个第三方库...醉了
--
👇
苦瓜小仔: 如果你有很多这样的枚举体,用第三方库最省事。
如果你不想引入库,使用 const 就好了:
https://docs.rs/strum/latest/strum/
这玩意儿不应该使用match?就算你能for,for了之后你怎么做?还不是要用
match
或者maches!
或者if
之类的东西不如自己写一个derive macro,加一个迭代器的实现,把成员放到数组里然后返回数组迭代器,对于不可遍历的枚举直接编译报错,仅仅是自用的话其实还算简单。
好像问题在于,并不是每一个enum都是可以遍历的
如果你想遍历,你不可避免地要处理
Option<i32>
的遍历问题大概是这个特性导致了enum没有公共的遍历方法
要是用这种const方式的话感觉很痛苦啊...特别这个enum很长的时候 不是要写两遍?而且增删也很不方便 现在只能先用第三方库了.第三方库自己又引入了好多个第三方库...醉了
--
👇
苦瓜小仔: 如果你有很多这样的枚举体,用第三方库最省事。
如果你不想引入库,使用 const 就好了:
非常感谢.这个需求crates.io上面有好几个第三方库 下载量还挺高的你别说
--
👇
苦瓜小仔: 当然,你也可以选择 trait 来抽象遍历枚举:
playground
那个 RFC 2014 年到现在没什么人推动,说明这不是大多数人的刚需。
当然,你也可以选择 trait 来抽象遍历枚举:
playground
那个 RFC 2014 年到现在没什么人推动,说明这不是大多数人的刚需。
如果你有很多这样的枚举体,用第三方库最省事。
如果你不想引入库,使用 const 就好了:
这个我知道 找了一圈貌似官方还真没有这种东西
https://github.com/rust-lang/rfcs/issues/284
这个rfc是不是还没有实现啊?
--
👇
苦瓜小仔: https://stackoverflow.com/questions/21371534/in-rust-is-there-a-way-to-iterate-through-the-values-of-an-enum
https://stackoverflow.com/questions/21371534/in-rust-is-there-a-way-to-iterate-through-the-values-of-an-enum