1

みたいなもの以外

(fn [& {:keys [more the-rest]}] ,,,)

可変数の引数とキーワード引数を同時に使用する方法はありますか?

(my-function arg1 arg2 some-other-args :opt1 opt1 :opt2 opt2)

?

4

1 に答える 1

2

関数を定義して、好きな方法で引数を取ることができますが、遭遇する問題は、次のようなあいまいな状況の違いをどのように見分けるかです。

(my-function arg1 arg2 arg3 arg4)
(my-function arg1 arg2 key1 val1)

違いを見分けるには、実行時にパラメーターを調べるコードを作成する必要があります(たとえば、3番目のパラメーターがキーワードであるかどうかを確認します)。これはかなり速く醜くなります。

したがって、このルートを進むことはお勧めしません。考慮すべき代替案:

  • 関数を単純化します。これだけ多くの引数がある場合は、1つの関数に「圧縮」しすぎている可能性があります。
  • すべてのキー/値引数を単一のマップとして渡す
于 2012-07-05T09:10:34.777 に答える