【问题标题】:Clojure - To pass a function as a var 'vs' To call a function from within the other function?Clojure - 将函数作为 var 'vs' 传递 从另一个函数中调用函数?
【发布时间】:2019-09-02 07:03:54
【问题描述】:

我只是想知道选择其中一个是否有任何优点/缺点,或者它是否纯粹是项目范围/工作流程的设计选择?

场景 1:使用 var 和 eval

 (defn fun1 [x] (prn (* x x)))
 (defn fun2 [y] (#'fun1 y))
 (eval (fun2 2))
 4
 nil

场景 2:创建函数调用的顺序链

(defn fun1 [x] (prn (* x x)))
(defn fun3 [y] (fun1 y))
(fun3 2)
4
nil

非常感谢您的回复,提前致谢!

【问题讨论】:

  • 注意eval 是一个函数,所以(eval (fun2 2)) 调用(fun2 2) 然后eval 结果即(eval 4) 所以没有理由更喜欢这种方法。直接通过 var 调用函数也是不必要的,因为符号被评估为相应 var 的值。
  • @Lee 明白了。谢谢!

标签: clojure functional-programming


【解决方案1】:

在场景 1 中,我相信您的本意是:

(defn fun1 [x] (prn (* x x)))
(defn fun2 [y] (#'fun1 y))
(fun2 2)

几乎没有必要(也不可取)使用eval

如需详细了解这些场景 1 和 2 的区别,请see this question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-19
    • 2015-05-29
    • 1970-01-01
    • 2022-11-12
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多