17. Scala文法ハイライト
for文
for (i <- 0 until 3) {
println(i)
}
0
1
2
val list = List(1, 2, 3)
for (elem <- list) {
println(elem)
}
0
1
2
18. Scala文法ハイライト
for yield文
val list = List(1, 2, 3)
val result0 = list.map(_ + 1)
println("pre = " + result0)
val result1 = list.map(elem => (elem + 1).toString)
println("use map = " + result1)
val result2 = for (elem <- list) yield
(elem + 1).toString
println("use for = " + result2)
pre = List(2, 3, 4)
use map = List(2, 3, 4)
use for = List(2, 3, 4)
19. Scala文法ハイライト
Extractor&正規表現
val extractor = """(¥d¥d¥d¥d)-(¥d¥d)-(¥d¥d)""".r
val extractor(yearString, monthString, dayString) =
"2009-08-06"
val year = yearString.toInt
val month = monthString.toInt
val day = dayString.toInt
val result = "%04d-%02d-%02d".format(year,
month, day)
println(result)
2009-08-06
20. Scala文法ハイライト
match文
abstract class Base
class Concrete1 extends Base {
def one = println("concrete one")
}
class Concrete2 extends Base {
def two = println("concrete two")
}
class Concrete3 extends Base {
def three = println("concrete three")
}
def get_base = if (true) new Concrete2 else new Concrete3
val b = get_base
b match {
case c: Concrete1 => c.one
case c: Concrete2 => c.two
case c: Concrete3 => c.three
}
concrete two
21. Scala文法ハイライト
Extractorとmatch文
val extractor = """(¥d¥d¥d¥d)-(¥d¥d)-(¥d¥d)""".r
val ymd = "2009-08-06"
ymd match {
case extractor("2008", _, _) => println("2008")
case extractor("2009", _, _) => println("2009")
case extractor("2010", _, _) => println("2010")
case _ => println("Unkonwn")
}
2009
22. Scala文法ハイライト
ケースクラスとmatch文
case class YearMonthDay(year: Int, month: Int, day: Int)
val ymd = YearMonthDay(2009, 8, 6)
ymd match {
case YearMonthDay(2008, _, _) => println("2008")
case YearMonthDay(2009, _, _) => println("2009")
case YearMonthDay(2010, _, _) => println("2010")
case _ => println("Unkonwn")
}
2009
23. Scala文法ハイライト
クロージャ
val closures = for (index <- 0 until 3) yield
{ (number: Int) => number + index }
println(closures)
for (closure <- closures) {
val result = closure(100)
println(result)
}
RangeM(<function>, <function>, <function>)
100
101
102
24. Scala文法ハイライト
XML
val cities =
<cities><city>Tokyo</city><city>Osaka</city></cities>
val names = for (city <- cities ¥¥ "city") yield city.text
println(names)
val cities2 = <cities>{
for (city <- names) yield <city>{ city }</city>
}</cities>
println(cities2)
ArrayBufferRO(Tokyo, Osaka)
<cities><city>Tokyo</city><city>Osaka</city></cities>