すごい広島 #104で遊んだときのメモ。

最近Scala勉強している。

Mapを使いなれていなかったので少し遊んだ。

参考になりそうなのは下記のサイト

さて遊ぶ

Mapを作ってみる。emptyでも作れるけど。

Map("hoge" -> 1)
// scala.collection.immutable.Map[String,Int] = Map(hoge -> 1)

値を取り出してみる。

Map("hoge" -> 1).get("hoge")
// Option[Int] = Some(1)

ImmutableなMapに要素をつけたしてみる。新しいMapができる。

Map("hoge" -> 1) + ("mogu" -> 2)
// scala.collection.immutable.Map[String,Int] = Map(hoge -> 1, mogu -> 2)

+でくっつけることができた。("mogu" -> 2)ってなんだろう。

("mogu" -> 2)
// (String, Int) = (mogu,2)

どうやらタプルらしい。

Map(("hoge", 1))
// scala.collection.immutable.Map[String,Int] = Map(hoge -> 1)

タプルをつかってつくるには括弧がふたついるようだ。なぜなのかよくわからない。 たぶん、"hoge" -> 1("hoge", 1)が等価だからだろう。

とりあえず、(+) :: Map[String,Int] -> (String,Int) -> Map[String,Int] みたいな感じのようだ。

Map("hoge" -> 1) + (("mogu", 2))
// scala.collection.immutable.Map[String,Int] = Map(hoge -> 1, mogu -> 2)

うまくいく。

Map("hoge" -> 1) + ("hoge" -> 2)
// scala.collection.immutable.Map[String,Int] = Map(hoge -> 2)

-> は演算子で , は違うようだ。他のタプルの生成方法を今度調べよう。

"hoge".->(1)
// (String, Int) = (hoge,1)
// "hoge".,(1) はできなかった

foldで処理できそうな程度に理解した気がする。

もうちょっと遊ぶ

inheritedにFunction1がいるのでapplyできるようだ。

Map("hoge" -> 1)("hoge")
// Int = 1

関数合成だってできる。

val one = Map("hoge" -> 1).compose({x:Any => "hoge"})
// Int = 1
one(1)
// Int = 1
one(2)
// Int = 1
one("hoge")
// Int = 1

とても楽しめた。

関連