gpt4 book ai didi

functional-programming - Clojure:如何在运行时创建函数

转载 作者:行者123 更新时间:2023-12-04 10:32:25 24 4
gpt4 key购买 nike

我想在运行时完全生成一个 fn(即名称和 arg 符号是在运行时决定的,而不是在代码中)
实现这一目标的最佳方法是什么?

例如,我如何实现以下功能?

(defn gen-fn [name arg-symbols body]
...
...

这将像这样使用:
(gen-fn "my-func-name" (symbol "x") (symbol "y") (println "this is body. x=" x))

请注意,函数名称、参数和主体没有编码,但可以在运行时决定

最佳答案

(defn gen-fn
[n as b]
(let [n (symbol n)
as (vec (map symbol as))
fn-value (eval `(fn ~n ~as ~b))]
(intern *ns* n fn-value)))

还有一些用途:
user=> (gen-fn "foo" ["x"] '(do (println x) (println (inc x))))
#'user/foo
user=> (foo 5)
5
6
nil

但是,我真的不喜欢这种方法。真的很难闻: eval .为什么要在运行时生成全局变量?我看到错误的命名空间和其他丑陋的打嗝在地平线上出现的各种问题......

关于functional-programming - Clojure:如何在运行时创建函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1824932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com