首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何编译这段Scala代码

如何编译这段Scala代码
EN

Stack Overflow用户
提问于 2014-11-19 09:27:25
回答 3查看 912关注 0票数 0

我有一个名为sumit.scala的文件,其中包含以下内容

代码语言:javascript
代码运行次数:0
运行
复制
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
}

我正在尝试在命令行上编译它

代码语言:javascript
代码运行次数:0
运行
复制
scalac sumit.scala

它编译时没有错误,但当我运行它时

代码语言:javascript
代码运行次数:0
运行
复制
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)

EN

回答 3

Stack Overflow用户

发布于 2014-11-19 11:03:39

函数

代码语言:javascript
代码运行次数:0
运行
复制
def total_select_values ...

必须放在对象或类的内部。这似乎是基于JVM的Scala的一个约束;不能有真正的自由函数。

票数 1
EN

Stack Overflow用户

发布于 2014-11-19 09:40:31

试着这样运行它

代码语言:javascript
代码运行次数:0
运行
复制
scala sumit.scala

即添加文件的扩展名。

票数 0
EN

Stack Overflow用户

发布于 2014-11-19 10:30:05

当我运行scalac时,您的代码显示以下错误:

代码语言:javascript
代码运行次数:0
运行
复制
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对象中(如注释中所建议的):

代码语言:javascript
代码运行次数:0
运行
复制
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
    }
}

然后,当我运行时:

代码语言:javascript
代码运行次数:0
运行
复制
scalac sumit.scala 
scala sumit

它产生:

代码语言:javascript
代码运行次数:0
运行
复制
time 0.003286401time 0.003286401

但同时,由于scala可以交互运行。只是在运行:

代码语言:javascript
代码运行次数:0
运行
复制
scala sumit.scala 

也是有效的。(可以省略scalac步骤。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27007368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档