检查函数的arity

时间:2014-10-15 15:12:44

标签: clojure arity

在haskell中编程时,:type命令非常有用。 通过了解函数的arity和签名,我们可以快速理解某些构造的目的。 例如:

Prelude Control.Monad.Reader> :type (lift .)
(lift .) :: (Monad m, MonadTrans t) => (a -> m a1) -> a -> t m a1

在知道函数的arity时是否存在等效的clojure(类型与clojure无关)?

例如,在我意识到( - )和(*)具有可变的arity之前,乍一看我并不容易理解波纹管组成:

(comp - *)

2 个答案:

答案 0 :(得分:2)

就个人而言,我使用REPL。特别是(doc), (source), (find-doc)实用程序。

例如:

  
    

用户=> (doc map)
    clojure.core /图
    ([f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3& colls])
      返回一个惰性序列,包含将f应用于的结果       每个coll的第一项的集合,然后将f应用于集合       每个coll中的第二个项目,直到任何一个colls       筋疲力尽。
      其他colls中的任何剩余项都将被忽略。函数f应该接受colls of colls参数。

  

如您所见,很容易找到arity。

我同意Haskell在这方面是首屈一指的。

答案 1 :(得分:1)

函数的参数列表存储在函数元数据中,您可以使用meta获取:

(:arglists (meta #'*))