Scala日記

Scalaの備忘録。ときどき研究の話。

2015-04-01から1ヶ月間の記事一覧

型消去の結果同じ引数型になってしまうメソッドをオーバーロードする その2

以前の話の続き。 型消去の結果同じ引数型になってしまうメソッドをオーバーロードする - Scala日記ym.hatenadiary.jp DummyImplicitという型を使って下のような書き方をする作法もあるらしい。 gist.github.com 使わない暗黙のパラメータを取ることで引数リ…

Arrayをprintしたい時は deep

ScalaのArrayは前回の問題のせいで、toStringで要素の値を文字列に出来ないが、WrappedArrayというラップ型に変換すれば中身も文字列化される。このため、適当にtoSeqなどして表示するわけだが、WrappedArrayという文字列が長くてイライラするし、多次元配列…

sbtで使われているclasspathを取り出す

以下のワンライナーでOK sbt "export compile:dependency-classpath" | tail -1 | scala -e 'import scala.io.StdIn;StdIn.readLine().split(":") foreach println'

型パラメータAを含むSeq[A]をtoArrayするときには実行時型が必要

昨日のScalaハマリポイント: 型パラメータAを含むSeq[A]をtoArrayするときには実行時型が必要 例えば、次のようなSchoolクラスがあったとする。 gist.github.com このクラスはStudentもしくはその子クラスのコレクションをメンバに持っている。このクラス設…

ScalaのSeqやMapは関数である

Arrayに関数オブジェクトを突っ込んでいるときに、「Arrayだって数学的には写像なんだから、Array[A => B]をInt => A => B だとみなせないのかな?」と思っていたら、ScalaのSeqがPertialFunctionトレイトを継承していることを発見。ちゃんと実現されていた…

Continuation-passing style で複数リソースの try-with-resource 構文を入れ子なしで書く

前回の話の続き。 Scala の標準ライブラリを使って try-with-resource 構文相当の表現を書く - ymの日記ym.hatenadiary.jp 末尾の参考文献によれば、CPS: Continuation-passing style(継続渡しスタイル) によって入れ子なしの記述を実現する方法もあるとの…

法律文の構文解析はとっても難しい

法律文の構文解析がいかに難しいかをよく説明する例。 この例文の中だけでも、かなり難しい要素がある。 ↓以下は「一文」です。 労働者の養育する子について、当該労働者の配偶者が当該子の 1 歳到達日以前のいずれかの日において当該子を養育するために育児…

Functional pearls

Functional pearls という素敵な論文集を見つけた。 日本語の訳本 関数プログラミング 珠玉のアルゴリズムデザイン作者: Richard bird,山下伸夫出版社/メーカー: オーム社発売日: 2014/11/12メディア: 単行本(ソフトカバー)この商品を含むブログ (1件) を…

EnumerationのvaluesはSotedSetを返すのでマップした結果もソートされる。

今日のScalaハマリポイント: EnumerationのvaluesはSotedSetを返すので、マップした結果もソートされる。 gist.github.com なにかやんごとなき理由があるのかもしれないが、直感には反するのでかなりのハマリポイント。 このせいで3〜4時間は費やしてしまっ…

型消去の結果同じ引数型になってしまうメソッドをオーバーロードする

学生さんから、「関数リテラルを引数に取るメソッドをオーバーロードするときはどうするのがスマートだと思いますか?」と聞かれて、ちょっと調べてみた。 どういう場合かというと、 gist.github.com みたいな場合。引数一つの関数オブジェクトはFunction1[-…

Scala の標準ライブラリを使って try-with-resource 構文相当の表現を書く

Scalaには標準では try-with-resource 構文が備わっていないが、自分で簡単に実装できるので、一般的にはこんなかんじのコードをそれぞれ書いて使う。 gist.github.com 標準ライブラリの範囲でできる書き方が何かないかなと模索していたら、こんな書き方がで…

for 式内での変数束縛の罠

今日のScalaハマりポイント: for 式内の変数束縛のタイミングが直観に合わない。 挙動をちゃんと知っていれば理解は出来るけれど、気を使って書かなければいけないのはデメリット。 gist.github.com 普通に読むと、iを束縛した後、bestを束縛して、jを回す…

untilで作ったRangeはshuffleできない

今日のScala悲しみポイント 「untilで作ったRangeはshuffleできない」 gist.github.com ↓ なんと、toで作ったRangeとuntilで作ったRangeでは型が違うらしい。 gist.github.com ↓ Listのように明示的に列挙されているコレクションに変換すればもちろんshuffle…

ScalaのREPLでコードの構文木を見る

scalaに-Xprint:<phase>オプションを渡すことでコードの構文木を見ることができる。 シンタックスシュガーの展開などをチェックするのに便利。 この状態で for式を入れると、デシュガーの結果がわかる。 gist.github.com -Xprintオプションに渡す出力フェーズは、"s</phase>…

ScalaのREPLに色を付ける

scalaのREPLに色をつける隠しオプションがあるらしい scala -Dscala.color でも、特に嬉しくない。