我有一个名为sumit.scala的文件,其中包含以下内容
object sumit {
def main(args: Array[String]) = {
val start:Double = System.nanoTime
total_select_values(1 to 15000, {e => true})
val end:Double = System.nanoTime
println("time " + (end - start)/ 1000000000.0)
println("")
}
}
def total_select_values(list: Range, selector : Int => Boolean) = {
var sum = 0
list.foreach { e =>
if (selector(e)) sum += e
}
sum
}
我正在尝试在命令行上编译它
scalac sumit.scala
它编译时没有错误,但当我运行它时
scala sumit
我收到了一堆错误,我是scala的新手,我只是想在编译后对这段代码进行计时,看看性能差异。我已经尝试将我的"total_select_values“放入对象和传出(如下所示),没有区别。
谢谢你的帮助!
使用Scala信息和实际错误进行了更新
Scala2.11.4Java 1.7.0_40版
java.lang.NoSuchMethodException: sumit.main([Ljava.lang.String;) at scala.reflect.internal.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:66) at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:101) at scala.tools.nsc.CommonRunner$class.run(ObjectRunner.scala:22) at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:39) at scala.tools.nsc.CommonRunner$class.runAndCatch(的java.lang.Class.getMethod(未知源)scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:39) at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:65) at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:87) at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:98) at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:103) at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)的ObjectRunner.scala:29)
发布于 2014-11-19 03:03:39
函数
def total_select_values ...
必须放在对象或类的内部。这似乎是基于JVM的Scala的一个约束;不能有真正的自由函数。
发布于 2014-11-19 01:40:31
试着这样运行它
scala sumit.scala
即添加文件的扩展名。
发布于 2014-11-19 02:30:05
当我运行scalac时,您的代码显示以下错误:
sumit.scala:11: error: expected class or object definition
def total_select_values(list: Range, selector : Int => Boolean) = {
^
one error found
但是,如果我更改代码以将total_select_values放入sumit对象中(如注释中所建议的):
object sumit {
def main(args: Array[String]) = {
val start:Double = System.nanoTime
total_select_values(1 to 15000, {e => true})
val end:Double = System.nanoTime
println("time " + (end - start)/ 1000000000.0)
println("")
}
def total_select_values(list: Range, selector : Int => Boolean) = {
var sum = 0
list.foreach { e =>
if (selector(e)) sum += e
}
sum
}
}
然后,当我运行时:
scalac sumit.scala
scala sumit
它产生:
time 0.003286401time 0.003286401
但同时,由于scala可以交互运行。只是在运行:
scala sumit.scala
也是有效的。(可以省略scalac步骤。)
https://stackoverflow.com/questions/27007368
复制