0

*次のコードで、関数の名前が最初の部分で(乗数)として機能する理由を説明できる人はいますか?

(defn bar
     ([a b]   (bar a b 100))
     ([a b c] (* a b c)))

bar2 つの引数を与える(bar 2 3)(* 2 3 100)

4

2 に答える 2

5

少し再フォーマットすると、何が起こっているのかを簡単に確認できる場合があります。

(defn bar
  ([a b]   (bar a b 100))
  ([a b c] (* a b c)))

これは、複数のアリティを持つ関数です。つまり、複数の引数セットを受け入れます。最初の定義はaとという名前の 2 つの引数を受け入れb、2 番目の定義はab、という名前の 3 つの引数を受け入れますc。関数の最初の定義が呼び出されると、関数の 2 番目の定義が呼び出され、最初の定義に与えられた引数ab引数が渡され、定数値 100 が 3 番目の引数として送信されます。の 2 番目の定義はbar、与えられた 3 つの引数を取り、 を使用してそれらを掛け合わせます(* a b c)

お役に立てれば。

于 2015-06-10T11:09:51.230 に答える
1

2 つのオーバーロードを持つ関数を定義しました。最初の引数は 2 つの引数を取り、2 番目の引数は 3 つ取ります。2 引数のオーバーロードは、3 番目の引数として 100 を使用して 3 引数バージョンを呼び出すだけです。

于 2015-06-10T11:05:52.663 に答える