すごい広島 #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
とても楽しめた。