首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在声明部分函数时获得“扩展函数缺少的参数类型”错误

在声明部分函数时获得“扩展函数缺少的参数类型”错误
EN

Stack Overflow用户
提问于 2019-04-01 05:44:48
回答 1查看 639关注 0票数 0

关于声明部分函数的类型推断,我遇到了一些问题。我尝试了下面的Scalatest代码:

代码语言:javascript
复制
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编辑器中没有显示任何警告/错误

直到我运行这个测试类,并且有一些编译错误:扩展函数的缺失参数类型

但是sum2defsum2val没有给定函数类型的Scala shell中工作得很好

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

我的问题是:

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

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-04-01 07:39:15

你的两个问题的答案:

1:例如见:Scala出乎意料地无法确定扩展函数的类型为什么在一种情况下得到“扩展函数缺少的参数”而不是另一种情况?

他说:我相信这确实是IntellIJ的一个实现选择,我对此表示赞同。我不希望为我定义的每个字符串或Int值提供类型提示。我

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55448732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档