2013-03-14 74 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中的相等運算符總是檢查身份。

參考

相關問題