3

语境

假设我有协议 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] ... )

因为 [] 被视为向量。

问题

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

谢谢!

4

1 回答 1

5

我不认为有任何这样的推荐方式,它似乎是一种类型注释。有一个这样的项目围绕在此链接上为 clojure 代码提供类型注释。

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

于 2012-05-22T06:35:42.360 回答