Scala の CanBuildFrom などについて

implicit conversionとかCanBuildFrom関係ないことも混ざってるけど気にするな。自分が入れたいものを入れただけです(・ω・`)ほんとtwitterやってるだけで勉強になりますね
2
前へ 1 ・・ 3 4
がくぞ @gakuzzzz

戻り値の具体的なインスタンスはコンテキスト(mapならその時適用した変換関数)によって変わるので、コンテキストにあわせて戻り値型を生成できるようにする必要がある。って点が抜け落ちてましたね。ご指摘多謝 #scala

2011-07-03 20:36:26
kmizu @kmizu

@gakuzzzz その通りですね。「戻り値同型の原則」を実現するだけなら、CanBuildFromとかは要らないです。昔(2.7.X)の頃はそういう風にDRYじゃないことやってたわけで、その辺りは知っています。って私に対するツッコミでなければすいません。 #scalajp

2011-07-03 20:50:02
kmizu @kmizu

コンテキストを読み違えてたらアレなのですが、 http://bit.ly/l3zFoL の補足に対するツッコミですよね。たぶん。 #scalajp

2011-07-03 20:55:06
がくぞ @gakuzzzz

@kmizu あ、いえいえ、ツッコミというよりkmizuさんの記事等を読んで自分の中の考えを整理してた感じです。更に補足や指摘を頂いて噛み砕いてる最中です!

2011-07-03 20:55:49
kmizu @kmizu

あれは、「Pimp my libraryでgrepとかみたいなのを追加する」という目的において、「戻り値同型」の原則を遵守しようとするなら、ややこしいことを知る必要があるよね、という趣旨で、 #scalajp

2011-07-03 20:58:14
kmizu @kmizu

CanBuildFrom自体の役割については、 @lyrical_logical さんや @gakuzzzz さんのおっしゃる事で合っています。 #scalajp

2011-07-03 20:59:38
akihiro @akihiro4chawon

これからの発言内容は、TLの全容知らずに言うことで、全く他意はないです。強いて言えば、「戻り値同型の原則」の出典が知りたいのです。

2011-07-03 21:06:01
akihiro @akihiro4chawon

// 実は、戻り値同型じゃない。 scala> Map(1 -> 'kiritshubo, 2 -> 'hahakigi) map {_._2} toString res1: String = List('kiritshubo, 'hahakigi)

2011-07-03 21:06:23
akihiro @akihiro4chawon

ちなみに、動的型は List でしたが、静的型は Iterabale[Symbol] です。いずれにせよ、コレクションが同型ではないです。

2011-07-03 21:07:33
がくぞ @gakuzzzz

「Pimp my libraryでgrepとかみたいなのを追加する」とい う目的において「ややこしいことを知りたくない!」という場合は戻り値型を型推論に任せちゃうというのも。再帰的なのには使えませんが https://gist.github.com/1062188 #scala

2011-07-03 21:08:13
kmizu @kmizu

その辺をちゃんと記事で書いてないのは私の手抜きではあります。

2011-07-03 21:09:45
akihiro @akihiro4chawon

このように同型でないでことは、2,8 collection library の説明に書かれている(むしろ同型の制約を撤廃するところに力点が置かれているようにも読める)のですが、どういうふうに理解すればいいでしょうね。(同型でないけれど、非同型ではなく構成的な説明が欲しい)

2011-07-03 21:10:00
がくぞ @gakuzzzz

確かに同型っていうよりコンテキストにあわせた型って感じですね。なんか用語があるのかな?

2011-07-03 21:10:46
kmizu @kmizu

@xuwei_k parser combinator等がが典型例なのですが、メンバとしてimplicit conversionを持てるおかげで、色々アレゲなことができるのが利点の一つではあります。 #scala

2011-07-03 21:12:43
がくぞ @gakuzzzz

「戻り値同型」の原則 ("same-result-type" principle) の出典は http://eed3si9n.github.com/scala-collections-impl-doc-ja/collections-impl_2.html これですかね?

2011-07-03 21:13:13
kmizu @kmizu

「CanBuildFromの謎」 http://bit.ly/kcWVZq は「CanBuildFromのインスタンスはどこから湧いてくるのか」にした方が良かったかもと反省。 #scalajp

2011-07-03 21:15:30
ねこはる @halcat0x15a

CanBuildFromについてはわかったつもりになっているだけだと思うので、テスト終わったらちゃんと確認したい。

2011-07-03 21:16:47
kmizu @kmizu

コラム自体にも書いたのですが、本題は、implicitなCanBuildFromのインスタンスって一体どこにあるのよ?という疑問に対する解を提供することだったので、CanBuildFromの説明はかなりはしょっています。 #scalajp_site

2011-07-03 21:16:52
akihiro @akihiro4chawon

.@gakuzzzz ありがとうございます。戻り値同型("same-result-type" principle)を目指すけれど、要素型が変わるなどして同しようもない場合(例えば 別の型への map など)は仕方ないという感じなんですね。スッキリしました。

2011-07-03 21:17:04
がくぞ @gakuzzzz

filter などは「戻り値同型」の原則に従っていて、それを実現するために newBuilder/foreach フレームワーク を使っていて、 map等に関しては「戻り値同型」の原則よりさらに柔軟な法則を適用する必要があるので Conceptパターンで実現した。 #scala

2011-07-03 21:19:27
がくぞ @gakuzzzz

っていう整理がしっくりくるのかな?

2011-07-03 21:19:40
前へ 1 ・・ 3 4