1

所有这些函数都做同样的事情:

def h0(f: Int => Int)(g: Int => Int)(x: Int) = f(g(x))
def h1(f: Int => Int, g: Int => Int)(x: Int) = f(g(x))
def h2(f: Int => Int)(g: Int => Int, x: Int) = f(g(x))
def h3(f: Int => Int, g: Int => Int, x: Int) = f(g(x))

现在我处于多重困境:我应该在哪种情况下“拆分”论点?

4

1 回答 1

3

拆分参数对于类型推断很有用(因为编译器会从左到右一次处理一个,因此您可以修复左侧的类型而不会陷入右侧的混乱——但缺点是,如果您在完全推断之前引用泛型类型,当您点击下一个参数块时,您会遇到部分进度),并且允许使用大括号而不是括号。所以如果你想要像这样的语法

h0{ i =>
  math.round(math.pow(0.9123751,-i)).toInt
}{ j =>
  (10*math.sin(j)).toInt
}(2)

那么你应该像h0. 否则,您可以做任何有意义的事情以获得最大的清晰度。特别是,h2上面很糟糕,因为它分组g并且x没有明显的原因。根据上下文,其他任何一个都可以。

于 2013-04-01T21:38:11.910 回答