У меня возникли проблемы с выводом типа для объявления частичной функции.Я попробовал 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
.
Мои вопросы:
- Почему мой редактор intellijне показывает мне ошибку / предупреждение, пока я не скомпилирую код?Мой код действителен в синтаксисе scala?Если это не верно, как установить мои intellij, чтобы показать мне ошибку?
- Почему мой код, используемый в intellij, не компилируется, но отлично работает в оболочке scala?
val
и def
ведут себя по-разному в моем intelliJ?def
показывает тип выведенной функции, а val
- нет.
Спасибо