私は現在、clojureでの最初の主要なプロジェクトに取り組んでおり、コーディングスタイルと何かを行うための最も「clojure風の」方法に関する質問に遭遇しました。基本的に、私が書いている関数には、データ構造と、その関数がデータ構造をマッサージしようとするテンプレートを取り込んでいます。テンプレート構造は次のようになります。
{
:key1 (:string (:opt :param))
:key2 (:int (:opt :param))
:key3 (:obj (:tpl :template-structure))
:key4 (:list (:tpl :template-structure))
}
各キーは、指定されたデータ構造で検索されるアトムであり、その値は、テンプレート構造で指定されたタイプと一致するように試行されます。たとえば、文字列であることを検索し:key1
て確認します。戻り値は:key1
、指定されたデータ構造からの値を指すマップになります(関数は、指定されたオプションに応じて値を変更する可能性があります)。
その場合:obj
、別のテンプレート構造を取り込んで、その値とテンプレート構造を再帰的に呼び出し、その結果を戻り値に配置します。ただし、エラーが発生した場合は、そのエラーを直接返したいと思います。
同様に、リストの場合、直接返されるエラーの場合を除いて、基本的に関数のマップを再度実行する必要があります。
私の質問は、これらのエラーを処理するための最良の方法は何ですか?いくつかの単純な例外処理が最も簡単な方法ですが、それは最も機能的な方法ではないと思います。たくさんのifステートメントを使って、チェーンのずっと上でエラーをベビーシッターすることができましたが、それもあまりスポーティーではないようです。私が見逃している単純なものはありますか、それともこれは単に醜い問題ですか?