0

我有一个名为 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 信息和实际错误

Scala 版本 2.11.4 Java 1.7.0_40

java.lang.NoSuchMethodException: sumit.main([Ljava.lang.String;) at java.lang.Class.getMethod(Unknown Source) at scala.reflect.internal.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:66 ) 在 scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:101) 在 scala.tools.nsc.CommonRunner$class.run(ObjectRunner.scala:22) 在 scala.tools.nsc.ObjectRunner$ .run(ObjectRunner.scala:39) at scala.tools.nsc.CommonRunner$class.runAndCatch(ObjectRunner.scala:29) at 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) 在 scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:103) 在 scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

4

3 回答 3

1

功能

def total_select_values ...

必须进入一个对象或类。这似乎是基于 JVM 的 Scala 的一个约束;不能有真正的自由功能。

于 2014-11-19T03:03:39.290 回答
0

当我运行 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 步骤。)

于 2014-11-19T02:30:04.970 回答
0

尝试像这样运行它

scala sumit.scala

即,添加文件的扩展名。

于 2014-11-19T01:40:30.827 回答