为什么相同的scala代码在命令行中运行正常而不在Intellij中?

时间:2015-07-06 03:42:38

标签: scala intellij-idea

以下是一个非常简单的scala代码(upper.scala):

/**
 * Created on 7/6/2015.
 */
class Upper {
  def upper(strings: String*): Seq[String] = {
    strings.map((s: String) => s.toUpperCase())
  }
}

val up = new Upper
println(up.upper("Hello World!"))

在命令行执行它,没关系:

[root@Fedora ~]# scala upper.scala
ArrayBuffer(HELLO WORLD!)

但是当在Intellij中使用运行'Scala console'命令执行它时,它会提示以下错误:

Error:(10, 1) expected class or object definition
val up = new Upper
^
Error:(11, 1) expected class or object definition
println(up.upper("Hello World!"))
^

屏幕截图如下:
enter image description here 有人能就这个问题提供一些线索吗?

2 个答案:

答案 0 :(得分:4)

您正在定义一个值并在文件(构建单元)内调用函数,这在Scala中是不允许的。它在REPL中起作用,因为它只隐式包装它into some default object,如:

object $iw {
  class Upper {
    def upper(strings: String*): Seq[String] = {
      strings.map((s: String) => s.toUpperCase())
    }
  }

  val up = new Upper
  println(up.upper("Hello World!"))
}

如果您正在寻找干净的支票,您的方法也无法使用普通scalac

解决方案:只需使用App特征,这将自动生成main方法,以便您可以运行代码:

 object MyApp extends App {
   val up = new Upper
   println(up.upper("Hello World!"))
 }

答案 1 :(得分:3)

我认为这是intellij中scala脚本的问题。运行此脚本的一种方法有点棘手。从我的观点来看,制作和扩展的对象和应用程序正在构建一个scala应用程序而不是scala脚本

首先删除配置中的make项目:

enter image description here

然后运行scala控制台

enter image description here

接下来,您必须选择代码并发送到控制台

enter image description here

最后,您可以在控制台中看到结果

enter image description here

我希望这可以运行你的代码脚本,而不需要和App