【问题标题】:get "missing parameter type for expanded function" error when declaring a partial function声明部分函数时出现“缺少扩展函数的参数类型”错误
【发布时间】:2019-04-01 05:44:48
【问题描述】:

我在声明偏函数的类型推断方面遇到了一些问题。我尝试了下面的 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 editor 中没有显示任何警告/错误

直到我运行测试类并出现一些编译错误: missing parameter type for expanded function

但是sum2defsum2valScala shell without given function type 中工作正常

我认为 Scala 编译器应该能够推断 sum2defsum2val 的类型,而无需说明函数类型 Int => Int

我的问题是:

  1. 为什么我的 intellij 编辑器在我编译代码之前不显示错误/警告?我的代码在 scala 语法中有效吗?如果它无效,如何设置我的 intellij 以显示错误?
  2. 为什么我在 intellij 中使用的代码无法编译但在 scala shell 中运行良好?
  3. valdef 在我的 intelliJ 中表现不同? def 显示函数推断类型,而 val 不显示。

谢谢

【问题讨论】:

  • 粘贴的代码在具有 scalatest 依赖项的 sbt 项目中对我来说很好。可能是项目配置有问题?

标签: scala intellij-idea type-inference scalatest


【解决方案1】:

回答您的 2 个问题:

1:参见例如:Scala unexpectedly not being able to ascertain type for expanded functionWhy do I get a "missing parameter for expanded function" in one case and not the other?

3:我相信这确实是 IntellIJ 的一种实现选择,我对此表示赞同。我不想为我定义的每个 String 或 Int 值提供类型提示。我

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多