数字の加算

数字の加算

lesson004.scala

import scala.io._

def toInt(in: String): Option[Int] =
    try {
        Some(Integer.parseInt(in.trim))
    } catch {
        case e: NumberFormatException => None
    }

def sum(in: Seq[String]) = {
    val ints = in.flatMap(s => toInt(s))
    ints.foldLeft(0)((a, b) => a + b)
}

println("Enter some numbers and press ctr-Z")

val input = Source.fromInputStream(System.in)

val lines = input.getLines.collect

println("Sum " + sum(lines))

実行結果

T:\>scala lesson004.scala
T:\lesson004.scala:19: error: missing arguments for method collect in trait Iterator
follow this method with `_' if you want to treat it as a partially applied function
val lines = input.getLines.collect
                           ^
one error found

http://d.hatena.ne.jp/kencoba/20100329/1269836994
「2.8では使えない。」そうです。

lesson005.scala

import scala.io._

def toInt(in: String): Option[Int] =
    try {
        Some(Integer.parseInt(in.trim))
    } catch {
        case e: NumberFormatException => None
    }

def sum(in: Seq[String]) = {
    val ints = in.flatMap(s => toInt(s))
    ints.foldLeft(0)((a, b) => a + b)
}

println("Enter some numbers and press ctr-Z")

val input = Source.fromInputStream(System.in)

val lines = input.getLines.toSeq

println("Sum " + sum(lines))

実行結果

T:\>scala lesson005.scala
Enter some numbers and press ctr-Z
1
2
3
4
5
^Z
Sum 15