在Typescript中的Curried函数

问题描述 投票:0回答:1

我正在编写一个简单的打字稿程序,它接受两个参数x和y,并将这些参数传递给Math.pow(x,y)。

因为我想写一个使用Math.pow()的curried函数,我试过:

function power(x:number,y:number):number {
   return Math.pow(x,y);
}

但是有些人把它写成:

function mathPow(x : number) : number => (number=>number) {

    (y : number) => Math.pow(x,y)
}

我想知道我上面的第一个尝试是否被视为咖喱,因为这是我能想到的最简单的。或者是第二个整体更好的咖喱版本?

--update

function pow(x:number):number {
  return function(y:number) {
    return Math.pow(x,y);
  }
}
javascript typescript currying
1个回答
0
投票

您可以使用此自定义咖喱函数将具有两个参数的任何函数转换为其“咖喱版本”:

 function curry<T1, T2, T3>(fn: (a: T1, b: T2) => T3) {
      return (a: T1) => (b: T2) => fn(a, b);
 }

然后你可以这样调用它:

    const curriedPower = curry(power);
    const fistArgPowerCall= curriedPower(5);
    const powerCallResult = fistArgPowerCall(5);

您还可以扩展它以处理3个参数:

function curry<T1, T2, T3, T4>(fn: (a: T1, b: T3, c: T2) => T4) {
     return (b: T3) => (c: T2) => (a: T1) => fn(a, b, c);
}

等等等等...

© www.soinside.com 2019 - 2024. All rights reserved.