4

で終わるメソッド*の共通点は何ですか? いくつか見たことがありますが、これが確立された命名規則であるかどうかはわかりません。

4

2 に答える 2

2

一般に、これは、同じことを行うが異なるシグネチャを持つ関数を区別するために使用されるのを見てきました。特に、オーバーロードが競合するセマンティクスを作成する状況で。たとえば、さまざまな方法で可変アリティを使用しているためlist*、 のオーバーロードとして表現できませんでした。list

多くの場合 (すべてではありません)、*フォームは非*バージョンによって呼び出されます。

于 2013-04-16T20:05:52.850 に答える
2

他の回答が言及したものとは別に、この規則は、非 * バージョンがマクロであり、これらのマクロが * 関数を呼び出すコードを発行する場合に使用されます。であってもclojure.coreletfnはマクロであり、結果として得られるコードはそれぞれ呼び出しlet*fn*関数を呼び出します。他の例はsqlkormaで、* 以外 ( where、など) はマクロで、* のもの (deleteなど)は関数です。updatewhere*delete*

このパターンを使用する理由は、API のマクロ バージョンを使用できない場合があるためです (コンパイル時に情報がないため、eval を使用する場合を除く)。そのような場合は、* を使用できます。ベースの機能。

于 2013-04-17T04:23:23.767 に答える