sta*_*and 11 clojure clojure-java-interop
说我有一个Java枚举.例如:
public enum Suits {CLUBS, DIAMONDS, HEARTS, SPADES};
Run Code Online (Sandbox Code Playgroud)
通常情况下,我可以用这样的枚举做一些clojure:
(defn do-something []
(let [s Suits/DIAMONDS] (...)))
Run Code Online (Sandbox Code Playgroud)
但是,我想编写一个clojure函数,允许调用者指定要使用的枚举实例:
(defn do-something-parameterized [suit]
(let [s Suits/suit] (...)))
Run Code Online (Sandbox Code Playgroud)
我们的想法是让呼叫者传递"DIAMONDS",并有DIAMONDS枚举实例获取绑定到s的let.
我可以cond匹配参数,但这似乎比必要的笨拙.我想我也可以使用宏来构造Suits/添加到suit.这是做到这一点的方式还是有一种我失踪的非宏观方式?
Dav*_*Ray 14
无需反射或地图.每个Java枚举都有一个静态valueOf方法,可以按名称检索枚举值.所以:
(defn do-something-parameterized [suit]
(let [s (Suit/valueOf (name suit))] ...))
Run Code Online (Sandbox Code Playgroud)
使用(name)允许使用字符串或关键字:
(do-something-parameterized "HEARTS")
(do-something-parameterized :HEARTS)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3187 次 |
| 最近记录: |