在Java/C世界中,人们经常使用枚举。如果我在使用一个使用枚举的Java库,我可以通过一些反射技巧将它们与关键字相互转换,例如使用
(. java.lang.Enum valueOf e..., (aget ^"[Ljava.lang.Enum;" (. e (getEnumConstants)) i)
等方法。但在Clojure世界中,人们是否需要像枚举(命名整数)这样的东西?如果不需要,那么他们的代码结构是如何实现的,以便不需要枚举?如果需要,那么有什么相应的替代方案吗?我感觉我真正想问的是索引(用于循环),这在函数式编程中很少用到(目前我只使用过map-indexed方法一次)。
(s/def :dog/breed #{:labrador :huskador :husky})
是检查“它必须是这些值之一”的传统方式。任何其他值都可以放入集合中,无论是Java枚举、整数还是字符串。 - luskwater