通过字符串名称调用clojurescript函数

szy*_*ski 5 clojurescript

我正在寻找一种方法来调用一个函数,给出它在clojureScript中的字符串名称.

就像是:

(call "my-fun" args) 
Run Code Online (Sandbox Code Playgroud)

欢迎任何帮助

Mar*_*ski 5

一个非常hackish解决方案应该工作:

(ns eval.core
  (:require [clojure.string :as str]))

(defn ->js [var-name]
      (-> var-name
          (str/replace #"/" ".")
          (str/replace #"-" "_")))


(defn invoke [function-name & args]
      (let [fun (js/eval (->js function-name))]
           (apply fun args)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Usage:

(ns example.core
  (:require [eval.core :as e]))

(defn ^:export my-fn [arg1 arg2]     ;; Note the export!
      (println arg1 arg2)
      arg2)

(e/invoke "example.core/my-fn" 5 6)                       ;=> 5 6
Run Code Online (Sandbox Code Playgroud)


Zub*_*air 1

这是不可能的,因为一旦您使用 clojurescript 的高级模式编译,那么所有函数名称都会被“munged”,因此当您想调用它时,将无法将字符串映射到 munged 函数