【问题标题】:Why does (#(+ % 1) 3) work but (#(%) 3) not work in Clojure?为什么 (#(+ % 1) 3) 工作但 (#(%) 3) 在 Clojure 中不工作?
【发布时间】:2015-10-07 04:40:11
【问题描述】:

标题说明了一切。为什么(#(+ % 1) 3) 可以工作,而(#(%) 3) 不能在 Clojure 中工作?相反,它给出了一个错误:

1. Unhandled java.lang.ClassCastException
   java.lang.Long cannot be cast to clojure.lang.IFn

#(%)不应该和identity函数一样吗?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    没有。 #(%) 正在尝试调用 %。与(fn [x] (x)) 相同。在您的具体情况下,您尝试将 3 作为函数调用。

    一个恒等函数应该是#(do %),因为do 计算它后面的表达式并返回最后一个。

    【讨论】:

    • 但是为什么%在第一个例子中表示参数值,而在第二个例子中调用参数呢?
    • 因为它是第二个示例中( 之后的第一件事。 ( 之后的第一件事就是你正在调用的函数。在第一个示例中,它是+
    • 很好的解释。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 2016-07-02
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    相关资源
    最近更新 更多