ScalaのStreamのaddStringとScalikejdbcのバグ

2
がくぞ @gakuzzzz

なんかこれ、Scala側の Stream の bug な気がしてきた。 https://t.co/6ZSTAkQuV7 Iterator だと問題なさそうだし。

2014-04-16 14:56:24
がくぞ @gakuzzzz

Streamの文字列化ってそういうものなのか……

2014-04-16 14:58:57
Kenji Yoshida @xuwei_k

@lyrical_logical @gakuzzzz Scaladoc書いてあるので、addStringで?がくっつくのは一応仕様っぽいですね https://t.co/OC0eWhUwjB リスコフの置換原則的に(?)どうなのか、という問題はありそうですけど

2014-04-16 15:06:33
がくぞ @gakuzzzz

@xuwei_k @lyrical_logical おーコメントに書いてありますね。ってことは意図してそういう挙動なんですね。そういうものなのか……

2014-04-16 15:09:41
Kenji Yoshida @xuwei_k

@gakuzzzz ただ、一番上の親のscaladoc見たときに https://t.co/XhXPQGi7Y3 そんな風にoverrideしていいのか?とか何も書いてなくて"Appends all elements of this "とかだけ書いてあるのは、かなり詐欺な気がする

2014-04-16 15:13:41
がくぞ @gakuzzzz

@xuwei_k ですね。実際ハマったので、ユーザが期待する動作とは異なっている気がします。

2014-04-16 15:15:26
病気の美少女 @lyrical_logical

@gakuzzzz @xuwei_k もう Scala とか忘れたんですが Iterator って有限じゃないといけないみたいな制限ありましたっけ(C++ にはある)それなら妥当な結果だと思います。そうでないなら Iterator の結果おかしい…

2014-04-16 15:19:42
kmizu @kmizu

@gakuzzzz @xuwei_k https://t.co/uafVdY6B8ghttps://t.co/61czd1j4gU の違いによって出た差の話ですよね。これはLSP破ってるので、詐欺って言うより設計ミスなのではないかという気が…

2014-04-16 15:20:05
kmizu @kmizu

@gakuzzzz @xuwei_k 本来なら、TraversableOnceの方でもう少し緩い制限にしておくべきだったのではない感が。

2014-04-16 15:21:26
kmizu @kmizu

@lyrical_logical @gakuzzzz @xuwei_k Iteratorは有限じゃなくてもいいですね…

2014-04-16 15:21:57
病気の美少女 @lyrical_logical

@kmizu @gakuzzzz @xuwei_k それだと Iterator#addString ちょっとまずいですよねえ。ドキュメントの内容に反してるような

2014-04-16 15:25:57
Kenji Yoshida @xuwei_k

まぁScala標準ライブラリが悪いのだけど、それとは別というか微妙に関係ある話として、IteratorをtoSeqするとStreamになるというの、変にハマることがほとんどで嬉しいことのほうが少ないので、必ずtoListかtoVectorなどを使え!というのもっと広まって欲しい

2014-04-16 15:26:56
Kenji Yoshida @xuwei_k

@lyrical_logical @kmizu @gakuzzzz 誰かドキュメント修正して pull req しましょう!

2014-04-16 15:27:53
がくぞ @gakuzzzz

Stream#addString は LSP破ってる。 無限Iteratorで addString すると死ぬ。 という感じ?

2014-04-16 15:37:59
kmizu @kmizu

Stream#addString(StringBuilder,String) がLSP破ってる、というのは、大本の http://t.co/X47XnjEV78 のドキュメントから判断したものですね。 #scalajp

2014-04-16 16:44:09
kmizu @kmizu

TraversableOnce#addString(StringBuidler, String)とStream#addString(StringBuidler, String)を比較したときに、後者の返り値の文字列の方が「制約が緩い」でこれはLSPに反しているという話。

2014-04-16 16:51:03
kmizu @kmizu

制約が緩いっつうのは、未評価のサンクは?として表示されることを許容する、という部分ですね。

2014-04-16 16:51:52