Является ли утверждение IntelliJ о «ненужных скобках» неправильным? - PullRequest
2 голосов
/ 23 марта 2019

У меня есть подпись этого метода:

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, которая принимает функцию y с двумя параметрами типа A и возвращает значение типа B. Я также хочу, чтобы функция x возвращала значение типа B.

Но последняя сигнатура, кажется, говорит, что fold:

возвращает функцию x, которая принимает два параметра типа A и возвращает другую функцию y, которая принимает параметр типа B и возвращает значениетипа B.

Это явно не то, что я хочу!В первом случае функция x возвращает значение.Во втором он возвращает функцию.

Действительно ли IntelliJ здесь не прав?

КОНТЕКСТ:

abstract class MyList[+A] {

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

}

1 Ответ

1 голос
/ 23 марта 2019

Редактировать: Как заметил @JoelBerkeley, определение такого метода в scala repl приводит к тому, что вы описали как ожидаемое поведение, так что вы правы.

Но из того, что я проверил в моем intellij, нет такогопредложение появляется.Я использую версию 18.5.3 и официальный плагин для Scala.Может быть ваша конфигурация ide не актуальна?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...