14

ドキュメントによると

A function that returns its first argument. This function is useful when writing code in the functional style.

そのようなユースケースの良い例をどこで見つけることができるのか疑問に思っています-Angularアプリで機能的なスタイルでコードを書くことです。ありがとう

4

4 に答える 4

15

AngularJS ソース コードの例:

function transformer(transformationFn, value) {
  return (transformationFn || angular.identity)(value);
};

説明:

transformationFnが最初のパラメーターとして指定されている場合は、value独自のパラメーターとして呼び出されます。それ以外の場合identity、関数は同じ値で呼び出されます。

ng ソースコードが言及しているように:

この関数は、機能的なスタイルでコードを記述する場合に役立ちます。

これが意味することは、関数型プログラミングにはグローバルがないため、常に必要なものすべてを渡したり注入したりする必要があるということです。

于 2013-03-14T23:19:31.247 に答える
9

以下の 2 つの関数があるとします。

$scope.square = function(n) {
return n * n
};


$scope.multplybyTwo = function(n) {
return n * 2
};

これを機能的な方法で呼び出すには:

$scope.givemeResult = function(fn, val) {
return (fn || angular.identity)(val);
};

次に、上記の関数を以下のように使用できます。

$scope.initVal = 5;
$scope.squareResult = $scope.givemeResult($scope.square, $scope.initVal);
$scope.intoTwo = $scope.givemeResult($scope.multplybyTwo, $scope.initVal);

以下のリンクをたどることができます:

http://litutech.blogspot.in/2014/02/angularidentity-example.html

于 2014-02-19T13:18:18.267 に答える
7

間違っている場合は訂正してください。ただし、私の理解では、これは

function transformer(transformationFn, value) {
  return (transformationFn || angular.identity)(value);
};

これに「リファクタリングされていない」可能性があります

function transformer(transformationFn, value) {
  if (transformationFn) {
    return transformationFn(value);
  } else {
    return angular.identity(value);
  }
};

identityこれは、この-less バージョンと機能的に同等です:

function transformer(transformationFn, value) {
  if (transformationFn) {
    return transformationFn(value);
  } else {
    return value;
  }
};

したがって、実際に存在する場合と存在しない場合がある何かが提供されたときに、特定の変換を値に適用したい場合に使用されると思います。

機能をよりよく説明したかったのですがidentity(私が理解しているように)、回答を確認すると、あなたの質問に本当に答えたとは思いません。とにかく役立つ場合に備えて、ここに私の答えを残します。

于 2015-04-30T14:00:23.540 に答える
4

angular.identity親から子にオブジェクトを渡すことによって、親にバインドされたオブジェクトを参照する場合に役立ちます。

恒等関数は、関数のゼロのようなものです。それ自体では役に立たないものですが、高階関数を使用する式の一部として役立つ場合があり、関数をパラメーターとして取得したり、結果として返したりすることができます。

配列値の例を次に示します。

たとえば、2 次元配列を最初の選択にバインドしてから、含まれている内部配列を各サブ選択にバインドできます。この場合の値関数は識別関数です。子要素のグループごとに呼び出され、親要素にバインドされたデータが渡され、このデータの配列が返されます。

ダミー関数を次の場所に渡す必要がある場合に使用します。

  • 約束 ($q)
  • コンパイラ ($compile)
  • 単体テスト (スパイ/モック)

これは、パイプ|フィルターのデータ ソースまたはポンプとして機能します。

比較すると、Angular.noopは常に undefined を返すため、promise のAngular.identity解決/拒否を正しく処理しませんが、it( f(x) = x) に渡された引数を常に返すため、promise の解決/拒否を正しく処理します。

Angular のコンストラクタに関しては、次のように関連しています。

JavaScript エンジンは、コンストラクターが明示的にオブジェクト (つまり、型オブジェクトまたは関数の値) を返さない場合にのみ、コンストラクターのインスタンスを返します。したがって、新しいアイデンティティ (値) は常にオブジェクトです。したがって、 new identity(value) == value は、value がオブジェクトの場合にのみ true を返します。これは、オペランドの 1 つがオブジェクトの場合、JavaScript の等値演算子が常に ID をチェックするためです。

参考文献

于 2015-10-02T14:54:06.213 に答える