以下是一个非常简单的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!"))
^
屏幕截图如下:
有人能就这个问题提供一些线索吗?
答案 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项目:
然后运行scala控制台
接下来,您必须选择代码并发送到控制台
最后,您可以在控制台中看到结果
我希望这可以运行你的代码脚本,而不需要和App