2013-03-14 76 views
14

根据文档有没有angular.identity()用例的好例子?

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

我想知道在哪里可以找到这样的用例的一个很好的例子 - 在角应用编写函数式代码。 由于从AngularJS源代码

回答

15

实施例:

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

说明:

在壳体transformationFn作为第一个参数提供,它将被用作为value它自己的参数调用。否则identity函数将被调用相同的值。

为NG的源代码中提到:在功能样式编写代码时

此功能是有用的。

这是什么意思是在函数式编程中没有全局变量,所以你总是必须通过/注入你需要的一切。

+2

我不明白为什么我们称之为'angular.identity()'功能(当transformationFn是不确定的),并且它在呼唤什么。 – mia 2015-01-09 17:32:41

+2

它在这里基本上用作默认实现 - 当没有提供转换函数时,只需返回到标识(即不转换)。 – 2015-01-15 13:23:54

9

假设我们有这两个以下功能:

$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

+3

欢迎来到Stack Exchange。这是[问题和解答站点](http://stackoverflow.com/about),而不是链接集合。请在您的答案中包含相关内容,而不仅仅是内容的链接。该链接很好,另外还可以作为参考或获取更多信息。有关更多提示,请参阅[如何回答](http://stackoverflow.com/questions/how-to-answer)。 – 2014-02-19 13:39:51

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功能(据我了解),虽然当我回顾我的答案,我不认为我真的回答你的问题。无论如何留下我的答案以防万一它有帮助。

+0

关于angular.identity实际上做了什么的明确解释,谢谢! – Michiel 2018-02-15 10:24:04

4

angular.identity对于想要通过从父项传递给其子项来引用绑定到父项的对象的情况非常有用。

身份函数就像函数的零。这种方式本身无用,但作为使用高阶函数的表达式的一部分偶尔有用,您可以将函数作为参数或作为结果返回。

这里是阵列值的示例:

例如,可以结合一个二维阵列的初始选择,然后结合包含内阵列的每个部分选定。在这种情况下,值函数是标识函数:它为每个子元素组调用,传递绑定到父元素的数据并返回这个数据数组。

使用它时,它是必要的一个虚拟函数传递给:

  • 一个承诺($ Q)
  • 编译器($编译)
  • 一个单元测试(间谍/模拟)

它充当管道的数据源或泵。

通过比较,Angular.noop不正确地处理解决/正确拒绝承诺,因为它总是返回未定义,而Angular.identity正确处理解析/拒绝承诺,因为它总是返回传递给它(f(x) = x)的自变量。

在角构造方面,它是相关的,例如:

JavaScript引擎只返回一个构造函数的实例如果构造不明确地返回一个对象(即对象类型的值或功能)。因此,新的身份(价值)永远是一个对象。因此,如果value是一个对象,那么新的identity(value)==值只返回true。这是因为当其中一个操作数是对象时,JavaScript中的相等运算符总是检查身份。

参考

相关问题