0

過去に私はできました、例えば

==> ((resolve (symbol "first")) [1 2 3])
1

しかし、Java 静的メンバーに対しては同じようには機能しないようです。たとえばenum、独自のファイルに次のようなものがあります。

import org.neo4j.graphdb.RelationshipType;

public enum RelTypes implements RelationshipType {
  KNOWS
}

私のClojureコード(neo4jを使用)では、次のことを行います。

(defn relate-to
  [from to reltype-as-keyword]
  (.createRelationshipTo from to 
    (resolve (symbol (str "RelTypes/" (.toUpperCase (name reltype-as-keyword)))))))

しかし、(resolve (symbol (str "RelTypes/" (.toUpperCase (name reltype-as-keyword)))))nil を返します。

アップデート:

使用できる別のライブラリからわかります(つまり、他の場所で定義された列挙型を使用せ、その場で s を作成します)。reifyRelationshipType

例えば

(reify RelationshipType
  (^String name [this] "KNOWS"))

しかし、Clojure コードの外部で Java ファイルに定義された列挙型を使用して、どのようにそれを行うのでしょうか?

4

1 に答える 1

1

この列挙型の場合

package hello;

public enum MyEnum {

    ONE, TWO;

}

次の Clojure のスニペットが機能します。

(Enum/valueOf hello.MyEnum "ONE")
于 2013-10-11T16:56:41.273 に答える