scala - 声明部分函数时出现“缺少扩展函数的参数类型”错误
问题描述
关于声明部分函数的类型推断,我遇到了一些问题。我尝试了下面的 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 编辑器中没有显示任何警告/错误
直到我运行测试类并且出现一些编译错误: 缺少扩展函数的参数类型
但是在没有给定函数类型的情况下在 Scala shellsum2def
中sum2val
工作正常
我认为 Scala 编译器应该能够在不说明函数类型sum2def
的情况下推断出的类型。sum2val
Int => Int
我的问题是:
- 为什么我的 intellij 编辑器在我编译代码之前不会向我显示错误/警告?我的代码在 scala 语法中有效吗?如果它无效,如何设置我的 intellij 以显示错误?
- 为什么我在 intellij 中使用的代码无法编译但在 scala shell 中运行良好?
val
并def
在我的智能中表现不同?def
显示函数推断类型,val
但不显示。
谢谢
解决方案
回答您的 2 个问题:
1:参见例如:Scala意外地无法确定扩展函数的类型以及为什么我在一种情况下得到“扩展函数的缺少参数”而不是另一种情况?
3:我相信这确实是 IntellIJ 的一个实现选择,我有点赞同它。我不想为我定义的每个 String 或 Int 值提供类型提示。我
推荐阅读
- javascript - 谷歌表格脚本不起作用?(用于更改其他选项卡中值的数组)
- javascript - 通过数字或字符串为 Date() 赋值有什么区别?
- javascript - 如何使用 v-for 循环使用 Vue.js 遍历列
- javascript - 如何获得对象acc的最大值形式。到不同的-不同的键
- javascript - 500 内部服务器错误,nodejs resetpassword 函数中的请求超时
- sql - 如何更改单元格 sqlite 的某个部分?
- javascript - 在 safari 浏览器中歌曲不播放
- ios - 无法直接在 iPhone 上运行 react-native 应用程序(部署目标错误)
- mysql - 如何将相同结构的表合并为一个?
- powershell - 如何使用 PowerShell 将文本添加到文件 foreach 列?