scala - 在 IntelliJ 中使用 Scala 工作表很难
问题描述
我正在学习 Scala 中的函数式编程原理课程,但是在 IntelliJ 中使用 Scala 工作表进行快速测试时遇到了很多问题。
例如,我建立了一个新的 Scala 项目,我在其中创建了一个名为的包对象lecture5
(它在文件中)src/main/scala/lecture5/package.scala
该文件的内容是:
package object lecture5 {
def last[T](xs:List[T]): T = xs match {
case List() => throw new Error("empty list")
case List(x) => x
case x :: y => last(y)
}
/* init should return all elements but last */
def init[T](xs: List[T]): List[T] = xs match {
case List() => throw new Error("List is empty")
case List(x) => List[T]()
case y :: ys => y :: init(ys)
}
def concat[T](xs: List[T], ys: List[T]): List[T] = xs match {
case List() => ys
case z:: zs => z :: concat(zs, ys)
}
}
在工作表中,我有以下内容:
import lecture5._
val x = List("a","b","c")
val xs = List("a","b")
val ys = List("c")
last(x)
init(x)
concat(xs, ys) == x
在我检查的工作表的设置中Interactive Mode
,Make project before run
并使用Run Type = REPL
(Plain
由于某种原因不起作用)和Compiler profile = Default
。
当我单击“ play
”按钮运行工作表时,功能init
和last
工作,但对于功能concat
我得到错误:
Error:(13, 9) not found: value concat
concat(xs, ys) == x
为什么concat
找不到?
请注意,如果我从内部使用 Scala 控制台sbt-shell
并执行相同的命令,那么一切正常。
如何配置 IntelliJ 以使用工作表而不会出现问题?
解决方案
我在 IntelliJ 2019.1.2、Scala Plugin 2019.1.8 上复制了这个问题。在运行工作表之前构建项目的任何形式都不起作用。之后终于成功导入包对象Invalidate Caches / Restart...
。一个似乎对我有用而无需重新启动的解决方法是使用 ScalaScratch file
而不是Scala Worksheet
:
Right click project | New | Scratch file | Scala
可能与问题SCL-12890有关
推荐阅读
- mysql - 仅显示用户使用 mySQL 关注的用户的帖子
- c++ - 多行输入 C++
- r - 使用选择时出现 dbplyr 错误以及在哪里过滤表
- uwp - 给定大量数据时,UWP 应用程序崩溃无异常
- java - Java:从输入字符串数组生成 nCr 数组并返回它
- javascript - 节点js中的异步系列?页面首先呈现在数据之前
- ajax - 如何将数据从 django 传递到引导模式?
- spring - Spring Boot - Cacheable 似乎每次都进入该方法
- docker - Docker 卡在构建和其他命令上
- html - 如何在 Shiny 和 Shinydashboard 中自定义 HTML 文本和 verbatimTextOutput 之间的空间