2013-03-14 3 views
14

Согласно документацииЕсть ли хороший пример использования для углового.identity()?

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

Мне интересно, где я могу найти хороший пример такого случая использования - писать код в функциональном стиле в угловом приложении. Благодаря

ответ

15

Пример из AngularJS исходного кода:

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

Объяснение:

В случае transformationFn предоставляется в качестве первого параметра, он будет называться с value, как его собственный параметр. В противном случае функция будет вызываться с тем же значением.

Как нг исходный код упоминает:

Эта функция полезна при написании кода в функциональном стиле.

Это означает, что в функциональном программировании нет глобалов, поэтому вам всегда нужно передавать/вводить все, что вам нужно.

+2

Я не понимаю, почему мы называем 'angular.identity()' функция (когда transformationFn не определено) и то, что он делает по призванию. – mia

+2

В основном он используется в качестве реализации по умолчанию - когда функция преобразования не предоставляется, просто возвращайтесь к идентификатору (т. Е. Без преобразования). –

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). –

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-версия:

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

Таким образом, я предполагаю, что прецедент был бы применен, когда вы хотите применить определенное преобразование к значению, когда вам предоставляется что-то, что может или не может существовать на самом деле.

Я хотел бы лучше объяснить функцию identity (как я понимаю), хотя, когда я просматриваю свой ответ, я не думаю, что я действительно ответил на ваш вопрос. Оставляя мой ответ здесь, в любом случае, если это будет полезно.

+0

Ясное объяснение того, что угловатое. – Michiel

4

angular.identity полезен для случаев, когда вы хотите ссылаться на объект, связанный с родителем, передавая его от родителя к его дочерним элементам.

Функция идентификации как функция нуля для функций. Вид бесполезен сам по себе, но иногда полезен как часть выражения с использованием функций более высокого порядка, где вы можете взять функцию в качестве параметра или вернуть ее в результате.

Ниже приведен пример для значений массива:

Например, вы можете связать двумерный массив в качестве начального выбора, а затем связать содержащиеся внутренние массивы к каждому Subselection. Функция значений в этом случае является функцией идентификации: она вызывается для каждой группы дочерних элементов, передается данные, привязанные к родительскому элементу, и возвращает этот массив данных.

Используйте его, когда необходимо передать фиктивную функцию:

  • обещания ($ д)
  • компилятор ($ компиляции)
  • тест блока (шпион/макет)

, который действует как источник данных или насос для фильтра трубы.

сравнения, Angular.noop неправильно обрабатывает разрешения/отказа от обещаний правильно, потому что она всегда возвращает неопределенное значение, в то время как Angular.identity правильно обрабатывает разрешения/отказа от обещаний, потому что она всегда возвращает аргумент, переданный ему (f(x) = x).

С точки зрения конструкторов в Угловое, она имеет отношение, как, например: двигатели

JavaScript возвращает только экземпляр конструктора, если конструктор не явно возвращает объект (т.е. значение объекта типа или функция). Следовательно, новая идентичность (значение) всегда является объектом. Таким образом, новое значение identity (value) == возвращает только true, если значение является объектом. Это связано с тем, что операторы равенства в JavaScript всегда проверяют идентификатор, если один из операндов является объектом.

Список литературы

Смежные вопросы