3

私は condp フォームを使用していて、そのドキュメントで気づきました:

デフォルトの式が指定されておらず、一致する句がない場合は、IllegalArgumentException がスローされます。

不一致に対処する必要はありません。また、condp を try 形式で囲みたくもありません。私はそこにプレースホルダーを置くことを考えています。最速で最も簡単なClojureプレースホルダーフォームは何ですか?

編集:

みなさんの意見、とても参考になります!この動作の使用例は、ユーザーがトリガーした強制的なデータ回復タスクで、アプリケーションが Clojure コードを動的に解析してログ ファイルからデータを回復する必要がある場合です。壊れたデータ (一致しないもの) は無視され、cond に同じフォームを記述した場合、condp よりも多くのキーストロークが必要になります。

4

3 に答える 3

4

不一致に対処する必要がない場合 (つまり、常に一致することを保証できる場合)、プレースホルダーとして何も配置する必要はありません。

常に一致するという仮定が間違っていることが判明した場合は、IllegalArgumentException が発生しますが、コードに論理エラーがあることがすぐにわかるので、これは良いことです。これは古き良きフェイルファストの原則です。

于 2012-07-28T14:36:38.223 に答える
2

あなたは言うことができます:

(condp = option
  :foo 1
  :bar 2
  3)
于 2012-07-28T10:47:19.390 に答える
1

簡単な答え: を使用しnilます。

しかし、デフォルト値が必要ない理由は、述語の少なくとも 1 つが保持されると確信しているからですよね? 副作用に頼っているわけじゃないですよね?

于 2012-07-28T10:44:42.433 に答える