Scala
Scalaはパターンマッチ内で正規表現を使ってマッチするかどうかの判定及びマッチした箇所の抽出が出来る。 val regex0 = "(.*)hell".r val input = "nutshell" val result = input match { case regex0(p) => Some(p) case _ => None } assert(result == Som…
お題: 新しい状態を作るにはcopyメソッドで新たなインスタンスを作ります。 そうすると結局お互いに保持している参照が古い状態を指していることになるので、参照を新しいものに付け替えなければなりません。 先の例ではvar属性だったため、再代入することで…
「同じ名前のimplicit defを2つ定義してimportした場合の挙動がScala2.9と2.10で異なる件 - xuwei-k's blog」みて思い出したので確認してみた。Scala 2.9.1 + scalaz 6.0.3で下のようなコードを書いてコンパイルすると "reassignment to val" エラーになる…
アクションに渡すときはパスやクエリストリングはアクションの引数の形に変換する必要がありますが、その変換ルールを定めているのが PathBindable[T], QueryStringBindable[T] といった implicit object です。conf/routes では例えば Int などはではデフォ…
"Play 2.0"もとい"Playframewok 2.0"もとい"Play framework 2.0"で*1、既存のコンポーネントを組み合わせて、新しいコンポーネントを作りたい。 例えば、日付を入力するのに、セレクトボックスで「年」「月」「日」を選んで入力するフォームを考える。 こう…
スタプラわー!(挨拶) 第8回全国戦優勝者です(本当) 携帯ゲームって初めてやったけど運営が伏せたルールをプレイヤーが当てる遊び的な感じですね。 折角攻略法見つけても「あれ不具合だから修正しました」て言われる恐ろしい展開もある。 閑話休題、"Play 2.…
"Play 2.0"もとい"Playframewok 2.0"もとい"Play framework 2.0"です。検索しにくいんだよksg。 使ったバージョンは2.0.3です。 あまり良いやり方じゃない気がするので、良いやり方があれば教えて下さい。 目的 Play 2.0でHTMLテンプレート上でアクションを…
Scalaの練習です。お題: 4けたの数について、それぞれの位の数字を大きいじゅんにならべた数から小さいじゅんにならべた数をひくという計算を行います。 1974 について、この計算を 100 回行った答えを書きなさい。 Z会三年生中学受験コース5月のてんさく問…
Listを扱うプログラムを書く時に、match式で::を使ってheadとtailを取り出すことが良くあると思う。 例えば、「二つのList a, bがあり、bがaに前方一致するならaからbを取り除いた残りを戻す」というような処理をmatchを使って書くと*1、こんな風になるかと…
パーサとテンプレートエンジンって丁度動きが逆だよなあと前から思ってたんだけど、てことはパーサコンビネータっぽい感じで文字列テンプレート書けないかと思った。 一応見た感じそれっぽく出来たけど、なんか格好悪い実装になってしまった。真性のScalaユ…
Scalaでコード書いていて、標準クラスの実装方法を見てみたくなることがある。※例えば、Listクラスのproduct()メソッドの実装など ソースコードを見るのに、メソッドがどこに実装されているかを知る必要があるんだけど、Javaのインターフェスと違ってScalaは…
Scalaの勉強してたら嵌った。挙動が良く分からない。 Scala使いには常識あるいは仕様読めwな話かもしれないけど。 実用性の話ではなくてパズル的な話です。 Scalaのバージョンは2.9.1 文字列をくっつける 引数a1とa2を取って文字列として連結したい。a1の型…
import scalaz.Validation.Monad._するとエラーがaccumulateされないのはなぜか。 まだちょっと良く分かってないので自分の理解を書く。ちなみにScalaz 6.0.3の話です。 Monadは普通Applicativeになる このへんの話から。また、Monad[M[_] ]はApplicative[M]…
前回のヤツのいくつか補足。 まだまだ勉強中だけど。 ValidationでFizzBuzz(anonymous left版) scalaz/example/ExampleApplicative.scala見てたらFizzBuzzにぴったりのオペレータ見つけたので書き直した。 import scalaz._ import Scalaz._ object FizzBuzzB…
Scalaz使ってみたかったのでScalaインストールした。 Scala素人なのでコードおかしいかも。 import scalaz._ import Scalaz._ object FizzBuzz { def makeValidator(d:Int, msg:String) = { (n:Int) => if (n % d != 0) n.success else nel(msg).fail } val …