首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从EDN文件中读取的调用函数

从EDN文件中读取的调用函数
EN

Stack Overflow用户
提问于 2015-01-13 10:56:54
回答 1查看 1.2K关注 0票数 2

我有一个EDN配置文件,其中条目引用了现有的功能,例如:

代码语言:javascript
复制
:attribute-modules {:content {:class lohan.extractors.content/process}
                    :schema  {:class lohan.extractors.schema/process}
                    :label   {:class lohan.extractors.label/process}
                    :user    {:class lohan.extractors.user/process}
                    :env     {:class lohan.extractors.env/process}}

使用clojure.edn/ read将这些条目读取为符号,但我希望能够在运行时调用它们。这样做的目的是为用户提供自己的一组功能。

我怎样才能做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-13 11:28:31

可以使用resolve调用符号引用的变量中的函数。

例如,如果您想通过使用+的符号来调用它,可以使用:

代码语言:javascript
复制
((resolve '+) 1 2)
;=> 3

因此,使用您的示例,您可以:

代码语言:javascript
复制
((resolve (get-in  (clojure.edn/read-string "{:content {:class ohan.extractors.content/process}
                                              :schema  {:class lohan.extractors.schema/process}
                                              :label   {:class lohan.extractors.label/process}
                                              :user    {:class lohan.extractors.user/process}
                                              :env     {:class lohan.extractors.env/process}}")
                   [:content :class])))

您需要限制用户可访问的允许符号集,或者对提供edn的用户具有高度信任,以防止他们在运行环境中执行您不希望他们访问的任何函数。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27920520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档