*
次のコードで、関数の名前が最初の部分で(乗数)として機能する理由を説明できる人はいますか?
(defn bar
([a b] (bar a b 100))
([a b c] (* a b c)))
bar
2 つの引数を与える(bar 2 3)
と(* 2 3 100)
少し再フォーマットすると、何が起こっているのかを簡単に確認できる場合があります。
(defn bar
([a b] (bar a b 100))
([a b c] (* a b c)))
これは、複数のアリティを持つ関数です。つまり、複数の引数セットを受け入れます。最初の定義はa
とという名前の 2 つの引数を受け入れb
、2 番目の定義はa
、b
、という名前の 3 つの引数を受け入れますc
。関数の最初の定義が呼び出されると、関数の 2 番目の定義が呼び出され、最初の定義に与えられた引数a
とb
引数が渡され、定数値 100 が 3 番目の引数として送信されます。の 2 番目の定義はbar
、与えられた 3 つの引数を取り、 を使用してそれらを掛け合わせます(* a b c)
。
お役に立てれば。
2 つのオーバーロードを持つ関数を定義しました。最初の引数は 2 つの引数を取り、2 番目の引数は 3 つ取ります。2 引数のオーバーロードは、3 番目の引数として 100 を使用して 3 引数バージョンを呼び出すだけです。