2
Clojure에서 Java 메서드를 함수 인수로 사용하려면 어떻게해야합니까? 작동하지 않는Clojure에서 함수 인수로 java 메서드 사용
user> (Integer. (str \9))
9
user> ((comp Integer. str) \9)
CompilerException java.lang.ClassNotFoundException: Integer., compiling:(NO_SOURCE_PATH:1:2)
:
예를 들어, 나는 기능 구성을 만들고 싶어.
memfn
도 도움이되지 않습니다
user> (map (comp (memfn Integer.) str) "891")
IllegalArgumentException No matching method found: Integer. for class java.lang.String clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:53)
어떤 아이디어?
관련 질문 (즉,하지만, 질문에 대한 정답을 제공하지 않음) :
- Using interop constructor in map function(Clojure) (답변에 좋은 설명이 있습니다)
(참고 : 익명의 함수를 래퍼로 사용하여 dave가 제안한 대답이 가장 좋은 해결책 인 것 같습니다.)
데이브, 즉 아무것도보다 낫다, 감사합니다,하지만 다른 방법도 있기를 바랍니다 (+1) –
Clojure가 작동하지 않는 이유는 무엇입니까? Clojure 함수는'IFn' 인터페이스를 따르는 Java * 객체 *입니다.이 인터페이스는 최대 20 개의 모든 속성을 호출하는 메서드와 무한히 긴 인수 목록을 호출하는 두 가지 방법이 있습니다. 이 모든 것들은 Java' Object' 인수를 취하고 또한 Java' Object'를 반환합니다. 'IFn'은 https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/IFn.java – Thumbnail
에서 찾을 수 있습니다. 내가 보는 바와 같이 선택 사항은 진정한 일등 가치 (언어를 약하게 만든다)가 아닌 함수를 사용하거나 모든 jvm 메소드를 추상화하여 진정한 기능처럼 행동하게함으로써 (언어를 지나치게 복잡하게 만든다.) – noisesmith