IntelliJ的“不必要的括号”主张错误吗?

时间:2019-03-23 13:30:26

标签: scala intellij-idea

我有这个方法签名:

def fold[B](startValue: A): ((A, A) => B) => B

IntelliJ告诉我,不需要在lamba表达式中加上括号,并且签名可以写为:

def fold[B](startValue: A): (A, A) => B => B

这是真的吗?我了解到我们具有右手关联性,这意味着

def fold[B](startValue: A): (A, A) => B => B

相同
def fold[B](startValue: A): (A, A) => (B => B)

但是,在我看来,这与我在第一个签名中所表达的并不相同。我想fold

返回一个函数x,该函数使用具有两个类型A的参数的函数y并返回类型B的值。我还希望函数x返回类型B的值。

但是最后一个签名似乎表明了这一点:

返回一个带有两个类型为A的参数的函数x,然后返回另一个带有一个B类型的参数并返回一个B值的函数y。

这显然不是我想要的!在第一种情况下,函数x返回一个值。在第二个中,它返回一个函数。

IntelliJ在这里真的错了吗?

上下文:

abstract class MyList[+A] {

  def fold[B](startValue: B): ((A, A) => B) => B

}

1 个答案:

答案 0 :(得分:1)

编辑:正如@JoelBerkeley所注意到的那样,在scala repl中定义这种方法会导致您所描述的预期行为,所以您是正确的。

但是从我检查intellij的内容来看,没有这样的建议出现。我正在使用版本18.5.3和用于scala的官方插件。也许您的ide配置不是最新的?