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) で scala.tools.nsc.CommonRunner$class.runAndCatch(ObjectRunner.scala:29) scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:39) で scala.tools .nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:65) で scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:87) で 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

このように実行してみてください

scala sumit.scala

つまり、ファイルの拡張子を追加します。

于 2014-11-19T01:40:30.827 に答える
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 に答える