为什么需要使用lodash / fp / constant?

时间:2018-04-10 13:53:58

标签: javascript functional-programming lodash

为什么需要使用<button class="btn label-info" data-toggle="collapse" data-target="#demo_{{$index}}" ng-click="findScheduledHours(schedule);">Book Appointment</button> <div id="demo_{{$index}}" class="collapse"> <form class="col-sm-12"> <div ng-repeat="scheduledHour in hoursList"> <div class="col-sm-3"> <button type="button" class="buttonAppointment" ng-click="selectScheduleSub(scheduledHourDto,scheduledHourDto.appointmentStartedDate,appointment.appointmentEnddate,scheduledHour);">{{scheduledHour}}</button> </div> </div> </form> </div> 中的.constant(value)?我看到其他一些人使用lodash/fp/constant_.constant(true),但不知道它有什么好处。

据我所知_.constant(1)返回一个返回给定.constant(value)的函数。我知道它与函数式编程有关,但为什么不只使用value

3 个答案:

答案 0 :(得分:3)

一个用例是在创建时填充数组:

  Array.from({length: 5}, _.constant(1))

但没有它实际上会更短:

  Array.from({length: 5}, () => 1);

答案 1 :(得分:2)

constant的用例只有在您了解功能范例时才会变得清晰。通过函数式编程,几乎所有东西都可以用函数表达。常数也不例外。这是一个人为的例子:

const map = f => xs =>
  xs.map(f);

const co = x => y => x;

console.log(
  map(co(0)) ([1,2,3]) // [0,0,0]
);

让我们实现一个更复杂的例子。我们想要一个需要两个monadic计算(aka动作)的函数,但我们只对第二个动作的结果感兴趣。那么为什么我们首先需要第一个动作呢?因为我们对它的副作用感兴趣:

const chain = mx =>
  fm => x => fm(mx(x)) (x);
  
const co = x => y => x;

const seq = mx => my =>
  chain(mx) (co(my));
  
const sqr = n =>
  n * n;
  
// monadic sequence

const z = seq(console.log) (sqr);

// apply it

const r = z(5); // logging 5 is the observed effect

console.log("return value:", r); // logs the return value 25

通常,带console.log的作文会导致错误:add(console.log(5)) (5)会产生NaN。但我们的实际构图看起来像add(co(sqr) (console.log(5)) (5),并根据需要产生25

然而,正如我上面提到的,要理解利用constant的高级功能习语,你需要正确理解范式。

答案 2 :(得分:1)

来自https://github.com/jashkenas/underscore/issues/402#issuecomment-3112193

// api: object.position = function(time) { return coords }
circle.position = _.constant( [10, 10] )

// api: image.fill( function(x, y) { return color })
image.fill( _.constant( black ) );
  

因此,主要用于将常量传递给期望函数的API。好的。