Programming in Scalaを読み始めた Chapter4
Chapter4はクラスとオブジェクト。難しくなってきた。。。
アクセス修飾子なにもつけないとpublic
objectキーワートでsingleton。newできない。
$ ls ChecksumAccumulator.scala Summer.scala $ cat ChecksumAccumulator.scala import scala.collection.mutable.Map 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 } } class ChecksumAccumulator { private var sum = 0 def add(b: Byte) { sum += b } def checksum(): Int = ~(sum & 0xFF) + 1 } $ cat Summer.scala import ChecksumAccumulator.calculate object Summer { def main(args : Array[String]) : Unit = { for(arg <- args) println(arg + ": " + calculate(arg)) } } $ scalac ChecksumAccumulator.scala Summer.scala $ ls ChecksumAccumulator$$anonfun$calculate$1.class ChecksumAccumulator$.class ChecksumAccumulator.class ChecksumAccumulator.scala Summer$$anonfun$main$1.class Summer$.class Summer.class Summer.scala $ scala Summer of love of: -213 love: -182
trait版。mainメソッドなくてもOK。ただしコマンドライン引数が取れない。
$ cat FallWinterSpringSummer.scala import ChecksumAccumulator.calculate object FallWinterSpringSummer extends Application { for (season <- List("fall", "winter", "spring")) println(season + ": " + calculate(season)) } $ scalac FallWinterSpringSummer.scala $ ls ChecksumAccumulator$$anonfun$calculate$1.class ChecksumAccumulator$.class ChecksumAccumulator.class ChecksumAccumulator.scala FallWinterSpringSummer$$anonfun$1.class FallWinterSpringSummer$.class FallWinterSpringSummer.class FallWinterSpringSummer.scala Summer$$anonfun$main$1.class Summer$.class Summer.class Summer.scala $ scala FallWinterSpringSummer fall: -159 winter: -153 spring: -147