コマンドを実行すると:
D:\scalaTest>fsc Summer.scala ChecksumAccumulator.scala
D:\scalaTest>scala Summer hello world
例外は次のとおりです。
Exception in thread "main" java.lang.RuntimeException: Cannot figure out how to run target: Summer
at scala.sys.package$.error(package.scala:27)
at scala.tools.nsc.GenericRunnerCommand.scala$tools$nsc$GenericRunnerCommand$$guessHowToRun(GenericRunnerCommand.scala:38)
at scala.tools.nsc.GenericRunnerCommand$$anonfun$2.apply(GenericRunnerCommand.scala:48)
at scala.tools.nsc.GenericRunnerCommand$$anonfun$2.apply(GenericRunnerCommand.scala:48)
at scala.Option.getOrElse(Option.scala:108)
at scala.tools.nsc.GenericRunnerCommand.<init>(GenericRunnerCommand.scala:48)
at scala.tools.nsc.GenericRunnerCommand.<init>(GenericRunnerCommand.scala:17)
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:33)
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:89)
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
これは、2 つの scala ファイルを含むソース コードです。
1つはSummer.scalaです:
import ChecksumAccumulator.calculate
object Summer {
def main(args:Array[String]) {
for(arg <- args)
println(arg + ":" + calculate(arg))
}
}
もう 1 つは ChecksumAccumulator.scala です。
import scala.collection.mutable.Map
class ChecksumAccumulator {
private var sum=0
def add(b:Byte) { sum += b }
def checksum():Int = ~(sum & 0xFF) + 1
}
object ChecksumAccumulator {
private val cache = Map[String,Int]()
def calculate(s:String):Int =
if(cache.contains(s))
cache(s)
else {
val acc = new ChecksumAccumulator
for(c<-s)
acc.add(c.toByte)
val cs = acc.checksum()
cache += (s->cs)
cs
}
}
どうもありがとう
ところで、これはMartin Oderskyによる本「scala 2nd.Editionでのプログラミング」の例です