3

引数リストの代わりに配列を使用するように関数を変換する高階関数を何と呼ぶのか疑問です。言葉で説明するのは複雑なので、JavaScriptに例があります。

sum = function(a,b){ return a+b; };
foo = function(fn){
    return function(arr){
        return fn.apply(fn,arr);
    };
};
different_sum = foo(sum);
log(sum(2,3)); //5
log(different_sum([2,3])); //5
4

5 に答える 5

2

n 項関数を取り、唯一の引数として n タプルを取る単項関数を返す Scala 関数用の同様のメソッドがあります。メソッドを呼び出します。 (または 1 より大きいその他の関数アリティのいずれか)のドキュメントでtupled確認できます。Function5

于 2012-11-24T06:28:55.243 に答える
1

従来のJavascript: The Good Partsでは、これはapply 呼び出しパターン(Javascript の 4 つの呼び出しパターンの 1 つ) として参照されます。

于 2012-11-24T06:27:24.097 に答える
1

「読みやすくするために、この関数を何と呼ぶべきですか?」と尋ねているように見えるので、verus 「これはどのようなタイプ/関数の分類ですか?」、私は 2 セントを投入します。

remixInputMethod()

実際には、関数のユーザーがプログラムと対話する方法を再配線するだけの問題です。このようなものは、ユーザーに操作してもらいたい方法とは異なる方法で入力を渡すことによって操作したいプログラムで役立つと思います。

this.sum = function(a,b){ return a+b; };
remixInputMethod = function(fn){
    return function(arr){
        return fn.apply(fn,arr);
    };
};
var _sum = remixInputMethod(this.sum);

// Throughout your program, do some more advanced, funky stuff
var sums = (function buildListOfSums(num){
    var arr = [], output = 0;
    while(num--){
        arr.push(num);
    }

    while(arr.length > 2){
        output += _sum([arr[arr.length - 1], arr[arr.length - 2]]);
        arr.pop(arr[arr.length - 1]);
        arr.pop(arr[arr.length - 2]);
    }
    return output;
}(20));
console.log(sums);

// But for the user, lets say, who downloaded your API on Github and is using it to
// build their first webpage for their uncle
// who thinks they are smarter than bill gates
sum(1,2);
于 2012-11-24T07:23:50.047 に答える
1

これに一般的に使用される用語はないようです。

Javascriptbindメソッドは関数呼び出しをそのようにラップします。特別な用語は使用されていません。

Prototypebindメソッドも同じことを行いますが、そこにも用語はありません。

jQueryproxyメソッドも同じことを行いますが、そこにも用語はありません。

説明では「ラッピング」という用語が使用されていますが、もちろんそれはより広い用語です。

于 2012-11-24T06:41:36.410 に答える
0

私はそれを可変個引数関数と呼びます。慣れていない場合は、可変個引数関数が引数のリストを取得し、プログラマーがそれらを配列として操作できるようにします。

Javascriptは可変個引数関数をサポートしていないためfn.apply(context, args)、これを実装する方法です。ただし、実際の実装は重要ではないと思います。

可変個引数関数はいくつかの異なる言語で表示されます。私のお気に入りは次のとおりです。

  • C- var_args
  • D
  • 行け

DのWebサイトにはかなり良い紹介があります:http://dlang.org/function.html(可変個引数を検索)

編集:

あなたの例は、可変個引数関数の正反対です。n個の引数を取り、それらを配列として操作する代わりに、引数の配列を取り、それらを個別の引数として操作します。

これは可変個引数をとるので、これは事実上可変個引数関数と同じものであると私はまだ主張していますが、それはそれらの引数とのやりとりの方法を変えているだけです。

より良い用語があるかもしれませんが、おそらくそれをinverse variadic function

于 2012-11-24T06:37:51.320 に答える