で終わるメソッド*
の共通点は何ですか? いくつか見たことがありますが、これが確立された命名規則であるかどうかはわかりません。
質問する
161 次
2 に答える
2
一般に、これは、同じことを行うが異なるシグネチャを持つ関数を区別するために使用されるのを見てきました。特に、オーバーロードが競合するセマンティクスを作成する状況で。たとえば、さまざまな方法で可変アリティを使用しているためlist*
、 のオーバーロードとして表現できませんでした。list
多くの場合 (すべてではありません)、*
フォームは非*
バージョンによって呼び出されます。
于 2013-04-16T20:05:52.850 に答える
2
他の回答が言及したものとは別に、この規則は、非 * バージョンがマクロであり、これらのマクロが * 関数を呼び出すコードを発行する場合に使用されます。であってもclojure.core
、let
とfn
はマクロであり、結果として得られるコードはそれぞれ呼び出しlet*
とfn*
関数を呼び出します。他の例はsqlkormaで、* 以外 ( where
、など) はマクロで、* のもの (delete
など)は関数です。update
where*
delete*
このパターンを使用する理由は、API のマクロ バージョンを使用できない場合があるためです (コンパイル時に情報がないため、eval を使用する場合を除く)。そのような場合は、* を使用できます。ベースの機能。
于 2013-04-17T04:23:23.767 に答える