3

この python はどのように表現すればよいでしょうか

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

クロジュアで?これは機能しますが、正しいですか?

(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

元の例は問題ありません。また、遭遇する可能性が高い 2 つのアプローチ:

;; 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", ...})

キーワード ( など) を提供したくないが文字列を好む場合は、 in:keywordを使用する必要があります。(get gl-enums str)gl-enum

于 2012-05-03T17:28:49.443 に答える