2

Java コンストラクターをファーストクラスの Clojure 関数として使用したいと考えています。私のユースケースは、一連の文字列を、単一の文字列を持つコンストラクターを持つ一連の Java オブジェクトに変換することです。

単純な Java オブジェクト:

public class Foo {
  public Foo(String aString){
    // initialize the Foo object from aString
  }
}

そしてClojureで私はこれをしたい:

(defn make-foo (memfn Foo. a-string))
(apply make-foo '("one" "two" "shoe"))

適用すると、文字列から作成された Foo オブジェクトのリストが返されるはずですが、次のようになります。

IllegalArgumentException No matching method found: org.apache.hadoop.io.Text. for class java.lang.String  clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:53)
4

1 に答える 1

8

気にしないでください。memfnコンストラクターを呼び出すこともできる無名関数リテラルを支持して、実質的に非推奨です#(Foo. %)

また、呼び出しは3 つの文字列引数で 1 回apply呼び出そうとします。make-fooあなたはおそらく代わりに欲しい:

(map #(Foo. %) ["one" "two" "three"])
于 2013-02-25T02:04:46.503 に答える