功能组成动态

时间:2014-07-22 09:34:44

标签: scala function-composition

让'我说我有一个函数move

现在,根据一些输入(让我们说输入说"移动3"),我必须移动3次。

我会这样做:

move compose move compose move

是否可以动态执行功能组合?这样我就可以根据我必须移动的次数来构建我的新函数。

谢谢

2 个答案:

答案 0 :(得分:11)

您可以使用Function.chain方法:

scala> val move1 = (x:Int) => x+1
move1: Int => Int = <function1>

scala> val move5 = Function.chain(List.fill(5)(move1))
move5: Int => Int = <function1>

scala> move5(5)
res1: Int = 10

答案 1 :(得分:4)

只需使用折叠:

def move(x: Int): Int = x + 1

def moveBy(n: Int) = 
  (1 to n).foldLeft[Int => Int](identity _) { (f, _) => f compose move }

moveBy(5)(0) // > 5