3

这个python应该怎么表达

gl_enums = ... # map from name to values for opengl enums
# use with gl_enums["enum name"]

在clojure中?这行得通,但是对吗?

(def gl-enums ...) ; map from name to values for opengl enums
(defn gl-enum [k] (or (gl-enums k) (throw (SomeException.))))
; use with (gl-enum :enum-name)

编辑:为澄清起见,这个问题是关于异常抛出部分,而不是映射定义部分

4

2 回答 2

4

你原来的例子是好的。您也可能会遇到两种方法:

;; not very idiomatic
(defn example
  [m]
  (if (contains? m :name)
    (:name m)
    (throw (IllegalArgumentException. (format "key %s is missing" :name)))))

;; idiomatic
(defn example
  [m]
  (if-let [v (:name m)]
    v
    (throw (IllegalArgumentException. (format "key %s is missing" :name)))))

更多关于 clojure.core/if-let 更多关于 clojure.core/contains?

于 2012-05-03T18:20:27.937 回答
-1

只需使用常规哈希图:

(def gl-enums {:name1 "value1", :name2 "value2",
               :name3 "value3", ...})

如果您不想提供关键字(如:keyword)但更喜欢字符串,则需要使用(get gl-enums str)ingl-enum

于 2012-05-03T17:28:49.443 回答