ошибка «отсутствует тип параметра для расширенной функции» при объявлении частичной функции - PullRequest
0 голосов
/ 01 апреля 2019

У меня возникли проблемы с выводом типа для объявления частичной функции.Я попробовал Scalatest код ниже:

class FunSpecTest extends FunSpec {
    describe("Partial Function Test") {
        def sum1(a: Int, b: Int): Int = a + b

        def sum2 = (a: Int, b: Int) => a + b // type-inference hints shown in Intellij

        val sum3 = (a: Int, b: Int) => a + b

        describe("Partial Function with 2 params") {
            it("add 2") {
                val sum1val: Int => Int = sum1(_, 2)
                assertResult(3)(sum1val(1))

                def sum2def = sum2(_, 2)// compilation error, but type-inference hints shown in Intellij
                val sum2val = sum2(_, 2)// compilation error
                assertResult(3)(sum2def(1))
                assertResult(3)(sum2val(1))

                val sum3val: Int => Int = sum3(_, 2)
                assertResult(3)(sum3val(1))

                val sum3valWithoutType= sum3(_, 2) // compilation error
                assertResult(3)(sum3valWithoutType(1))
            }
        }

    }
}

в моем редакторе intelliJ

нет никаких предупреждений / ошибок, пока я не запустил тестовый классошибка компиляции: отсутствует тип параметра для расширенной функции

Но sum2def и sum2val отлично работают в Оболочка Scala без заданного типа функции

Я думаю, что компилятор Scala должен иметь возможность выводить тип sum2def и sum2val без указания типа функции Int => Int.

Мои вопросы:

  1. Почему мой редактор intellijне показывает мне ошибку / предупреждение, пока я не скомпилирую код?Мой код действителен в синтаксисе scala?Если это не верно, как установить мои intellij, чтобы показать мне ошибку?
  2. Почему мой код, используемый в intellij, не компилируется, но отлично работает в оболочке scala?
  3. val и def ведут себя по-разному в моем intelliJ?def показывает тип выведенной функции, а val - нет.

Спасибо

1 Ответ

0 голосов
/ 01 апреля 2019

Ответы на 2 ваших вопроса:

1: См. Например: Scala неожиданно не смогла определить тип для расширенной функции и Почему я получаю "пропущенный"параметр для расширенной функции "в одном случае, а не в другом?

3: Я полагаю, что это действительно выбор реализации IntellIJ, и я отчасти одобряю это.Я не хотел бы иметь подсказки типа для каждого значения String или Int, которое я определяю.Я

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