나는 이처럼 정의 된 함수 스펙을 가지고 있으며 이것을 전달할 수 있도록 함수 오브젝트로 평가하려고합니다.목록 양식을 clojure의 함수로 변환하는 방법
(def spec '(foo [n] (* 2 n)))
나는이
(defmacro evspec [name arg & body] `(defn ~name [~arg] [email protected]))
다음 호출이 날 줄 것이다 함수 foo와 같은 매크로를 만들 수 있습니다. 3 호출 할 때, (foo는 3), 내가 위에서 정의 된 내 사양에서 함수 본문을받을 경우 함수 foo 실 거예요 (* 2 n)은 몸의 양식을 평가 반환, 그러나 6
(evspec foo n (* 2 n))
를 반환합니다 대신, 본문 양식을 반환합니다.
(let [foo (first spec) arg (first (second spec)) body (last spec)]
(evspec foo arg body))
user=> (foo 3)
(* 2 n)
나는 작업 foo는 기능이
user=> foo
#<user$foo [email protected]>
아무도의 차이입니다 이유를 설명 할 수있는 동안 지금 만든 푸 기능은 $ 평가 후면 $ foo는
user=> foo
#<user$eval766$foo__767 [email protected]>
예고하고 어떻게 할 수 작동하게 만들다 ? eval에 회신하지 않고 방법을 갖고 싶습니다. 자바 스크립트 배경에서 오는 어쨌든 나는 항상 eval이 악하다고 생각한다.
함수 객체를 전달하려면 defn foo [...]를 사용하고 심볼 foo를 전달하면됩니다. –