3

コンテクスト

プロトコルICursor、IFoo、IBarがあるとすると、次の名前の関数を使用できます。

(defn IFoo->IBar [foo] ... )

ここで、2つの引数を取る関数があるとします。

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コードに型注釈を付けることに関するそのようなプロジェクトが1つあります。

:のようなものを使用できます。(defn ICursor->IFoo->IBar [x y] ...) これは、関数がICursorとIFooをパラメーターとして受け取り、IBarを返すことを示します。したがって、基本的に最後のタイプはリターンタイプであり、その前はすべてがパラメータータイプですが、それが長期的または慣用的な解決策になるかどうかはわかりません。それでは、メソッドの実際の名前はどこにあるのでしょうか:)これは重要であり、アノテーションを入力します。

于 2012-05-22T06:35:42.360 に答える