scala

scaladocを読むために

scaladoc読んで勉強してても記号が多いのとよく分からないキーワードが出てきて読みづらい。 気になったものを調べてまとめる。 型 よく出てくるのは以下だ。 AnyはJavaでいうObject型。 UnitはJavaでいうvoid。 可変長引数 以下はMap#+メソッド。*の部分。 …

正規表現メモ

val pattern = """何らかのパターン""".r pattern.findAllIn("対象文字列").matchData.map{ m => m.group(1) -> (if( m.group(2) == null ) "" else m.group(2)) }.toMap

Intellij IDEAのsbt consoleで文字化け解消

specs2でのユニットテストの練習。 で、Intellij IDEAのsbt consoleで実行したら日本語が化ける・・・。コンソール上のsbtでも同様に日本語が化ける。。 色々調べて以下の情報に。意外と見つからなかった。参考:http://qiita.com/items/3fd54c5b69710490417…

sbt gen-idea

sbt gen-idea を実行すると、 [error] Not a valid command: gen-idea [error] Expected '/' [error] Expected ':' [error] Not a valid key: gen-idea [error] gen-idea [error] ^と表示された。コマンドとして認識していない模様。標準コマンドでは無いよ…

sbtでダウンロードしてきたライブラリのある場所

sbtで管理されたライブラリのDL先。 ~/.ivy2/cache/org.apache.derby/ sbtはApache Ivyがベースになっているとのこと。

Mapのメソッド

基本操作 val map = Map(1->"one", 2->"two", 3->"three") // 生成 map + (4->"four") // キー・値の追加 map + (4->"four", 5->"five") // キー・値の追加 map - 2 // キーを指定してキー・値の削除 map.size // 長さを得る 3 map(1) // 値取得 one map.app…

Listのメソッド

基本操作 val list = List(1,2,3) // 生成 val list = List.range(1,4) // 生成 List(1,2,3) val list = List(1 to 3: _*) // 生成 List(1,2,3) val list = List.empty // 空リストの生成 0 +: list // 先頭に要素を追加 List(0,1,2,3) 0 :: list // 上と同…

正規表現とextractor

刺激を求める技術者に捧げるScala講座 パターンマッチをもっと便利に うひょー、これはすごい。 val datePattern = """(\d\d\d\d)-(\d\d)-(\d\d)""".r val datePattern(y,m,d) = "2013-05-05" println("%s年%s月%s日".format(y, m, d)) // 2013年05月05日

Scalaの基本文法(忘れそうなもの)

for 1〜10まで3刻みで。 for(i 1<- 1 to 10 by 3) println(i) 1〜20(20は含まない)のうち、2と3の倍数だけ。 for(i <- 1 until 20 if i % 2 == 0; i % 3 == 0) prinltn(i) 2重ループ for(i <- 1 to 2; j <- 1 to 4) println(i + "-" + j) 戻り値を返すfor…

関数について

関数定義 通常はメソッドとして宣言される。 def 関数名[型パラメータ](引数名:引数の型名,……):返り値 = 関数本体 たとえば、 def sum(x:Int, y:Int) = x + y 関数リテラル 変数に代入可能。メソッドの引数としても。 (変数名:型名,……) => 関数本体 たとえば…

Scala流ダックタイピング

rubyの例。 def execute_with_log(f) puts "start" f.execute() puts "end" end って定義しておけば、引数にはexecuteメソッドを持つクラスのオブジェクトはなんでも渡せる。 Javaではこれは実現できなくて、引数で宣言した型(もしくはインタフェース)のオ…

部分適用とカリー化

部分適用 まず普通の関数。 def sum(a:Int, b:Int, c:Int) = a + b + c val result = sum(1,3,5) // 9 コレをこんなふうに出来る。第三引数を5に固定。 val sum2 = sum(_:Int, _:Int, 5) val result = sum2(1,3) // 9 カリー化 引数が元の関数の最初の引数で…

再帰

Scalaの勉強を再開した。 Ninety-Nine Scala Problemsとりあえず今日は第一問目。 scala> last(List(1, 1, 2, 3, 5, 8)) res0: Int = 8 こんな関数lastを作りなさい、と。 で、作ったのはこれ。 def last[T](ls:List[T]):T = { l(ls.size - 1) } 答えはコレ…