으로 GET 매개 변수를 사용하여이 내 Clojure의 링 핸들러는 함수 이름
(defn handler [req]
(let [distr (get-in req [:query-params "dist"])]
(def sortie (describe (eval ((resolve (symbol distr)) 1 3))
0.5 0.25 3))
{:status 200
:headers {"Content-Type" "text/html"}
:body (str "<p>" (print-str sortie) "<p>")}
))
(def app
(-> #'handler
(ring.middleware.stacktrace/wrap-stacktrace)
(wrap-spy)
(wrap-params)
))
문자열로 "DIST"키지도입니다.
:query-params {"dist" "gaussian-dist"}
함수 이름으로 사용하고 싶습니다. 내가 문자열이 DISTR를 교체 할 때 전체
(eval ((resolve (symbol distr)) 1 3))
원하는대로 작동,지도를
를 반환합니다.
=> (eval ((resolve (symbol "gaussian-dist")) 1 3))
{:Distribution :actuarial.distributions/Gaussian, :Parameters {:sigma 3, :mu 1}}
편집 :
이것은 내가 내 문제 해결 결국 방법은 다음과 같습니다 다시 감사합니다, 나는 매크로
를 사용하여 내가 그것을 통해 가지고 Clojure의에서 초보자 해요
(defmacro get-map [map name]
`(get ~map ~name))
(defn handler [req]
(let [distr-name (get-in req [:query-params "dist"])
distr-map ((get-map distributions-map distr-name) 1 3)
sortie (describe distr-map 0.5 0.25 3)
]
{:status 200
:headers {"Content-Type" "text/html"}
:body (str "<p>" sortie "<p>")}))
'distr '의 값이 예상 한 것과 같지 않은 것 같습니다. println을 넣거나 검사하고 출력을 포함 할 수 있습니까? –
def 내부 함수를 사용하지 마십시오. 'sortie '는 사용하기 전에 다른 요청으로 대체 될 수 있습니다. – noisesmith
이 매크로는 함수로는 할 수없는 일을하지 않고,'(defn get-map [map name] (get map name))'또는'(get get-map get) '. – amalloy