Clojure函数命名约定

时间:2012-05-22 06:08:32

标签: clojure

上下文

假设我有协议ICursor,IFoo,IBar,那么我可以有一个名为:

的函数
(defn IFoo->IBar [foo] ... )

现在,假设我有一个带两个参数的函数

x: ICursor
y: IFoo

并输出IBar类型的对象。

现在,有没有标准方法在函数名称中表示这一点?例如,以下都不起作用:

(defn ICursor,IFoo->IBar [x y] ...)

因为“,”被视为空格

(defn (ICursor, IFoo)->IBar [x y] ... )

因为()被视为函数应用程序。

(defn [ICursor, IFoo]->IBar [x y] ... )

因为[]被视为向量。

问题

是否有一种标准方法可以在函数名中编码参数的协议类型?

谢谢!

1 个答案:

答案 0 :(得分:5)

我认为没有任何这样的推荐方式,它看起来像是一种类型的注释。有一个这样的项目围绕在link上为clojure代码提供类型注释。

你可以使用类似:(defn ICursor->IFoo->IBar [x y] ...)的东西,表示该函数将ICursor和IFoo作为参数并返回IBar,所以基本上最后一种类型是返回类型,在此之前一切都是参数类型但我不确定是否可以是一个长期或惯用的解决方案,因为那么方法实际名称:)在哪里是重要的,然后键入注释。