[#38371] Re: [ruby-cvs:30538] Ruby:r23320 (trunk): * lib/set.rb (SortedSet#add): Do not let an uncomparable object — "Yugui (Yuki Sonoda)" <yugui@...>
Yuguiです。
At Mon, 4 May 2009 23:44:22 +0900,
遠藤です。
At Fri, 8 May 2009 02:00:10 +0900,
[#38372] making install-sh more descriptive — "Yugui (Yuki Sonoda)" <yugui@...>
install-shが空になって久しい(r520)です。
[#38382] [Bug #1442] indentation check and coverage for toplevel do not work — Yusuke Endoh <redmine@...>
Bug #1442: indentation check and coverage for toplevel do not work
[#38390] [Bug:1.8] Tempfile and extended Enumerable — Tanaka Akira <akr@...>
1.8.8dev で、以下のように、Enumerable に each2 を定義し、
[#38392] Enumerable#gather_each — Tanaka Akira <akr@...>
ときに、複数行をまとめて扱いたいことがあります。
ujihisaと申します。
まつもと ゆきひろです
At Sun, 10 May 2009 06:00:08 +0900,
In article <E1M2t0u-0000Aa-Sd@x61.netlab.jp>,
まつもと ゆきひろです
In article <E1M4oSd-00005c-WB@x61.netlab.jp>,
In article <873ab3531u.fsf@fsij.org>,
まつもと ゆきひろです
At Sat, 9 May 2009 15:30:20 +0900,
In article <86r5yy2nrg.knu@iDaemons.org>,
At Sun, 10 May 2009 10:08:47 +0900,
In article <86ocu132gq.knu@iDaemons.org>,
At Sun, 10 May 2009 15:57:33 +0900,
In article <86my9l2tts.knu@iDaemons.org>,
Haskell の groupBy と Python の groupby が似ている、という話
遠藤です。
In article <e0b1e5700905140800y6d701c6fj731a59ffd83b9d79@mail.gmail.com>,
[#38423] longlife gc — Narihiro Nakamura <authornari@...>
nariと申します.
[#38446] [Bug:1.9] exact Time and inexact Time — Yusuke ENDOH <mame@...>
遠藤です。
In article <e0b1e5700905132145i32bed2f0y80faef19c119824f@mail.gmail.com>,
遠藤です。
[#38463] SQLiteライブラリ — "NARUSE, Yui" <naruse@...>
成瀬です。
[#38486] [Bug #1483] some commands installed without program-suffix — Kazuhiro NISHIYAMA <redmine@...>
Bug #1483: some commands installed without program-suffix
[#38493] [Feature:trunk] enhancement of Array#drop — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
[#38518] [Bug:1.9] Enumerator.new { }.take(1).inject(&:+) causes stack overflow — Yusuke ENDOH <mame@...>
遠藤です。
[#38524] [Bug #1503] -Kuをつけた時、/[#{s}]/n と Regexp.new("[#{s}]",nil,"n") で実行結果が異なる — sinnichi eguchi <redmine@...>
Bug #1503: -Kuをつけた時、/[#{s}]/n と Regexp.new("[#{s}]",nil,"n") で実行結果が異なる
[ruby-dev:38405] Re: Enumerable#gather_each
In article <86r5yy2nrg.knu@iDaemons.org>,
"Akinori MUSHA" <knu@iDaemons.org> writes:
> 少し仕様がわかりにくいように思います。繰り返しというストリームの
> バッファという発想から、次のようなインターフェースを考案しました。
どのようにわかりにくかったでしょうか?
> どうでしょうか。
まず、gather_each に比べてコードが長くなってよろしくありません。
たとえば、最初に出したパラグラフの例は以下のように長くなってしまいます。
buffer:
open("lib/scanf.rb") {|f|
f.buffer {|e, b|
s = e == "\n"
b.flush if b.status != nil && b.status != s
b.status = s
b << e
}.each {|lines| pp lines }
}
gather_each:
arg = lambda {|l| l == "\n" }
open("lib/scanf.rb") {|f|
f.gather_each(arg) {|lines| pp lines }
}
また、gather_each は、ある要素に対する処理は、その要素とそれ
が属するまとまりのことだけを考えて書けばいいようにデザインし
てあるのですが、buffer では直前のまとまりを flush する必要が
あって、直前のまとまりについても考えなければいけません。
つまり、buffer のほうが考えることが多くなってよろしくありま
せん。
たとえば、ChangeLog をエントリ単位に処理するには、行頭が空白
じゃなかったら flush すればいいというわけで以下のようにすれ
ばいいと考えるかもしれませんが、実はそれだけだと先頭に [] が
表示されるというバグが発生してしまいます。
open("ChangeLog") {|f|
f.buffer {|e, b|
b.flush if /\A\S/ =~ e
b << e
}.each {|lines| pp lines }
}
ちゃんとやるには条件を /\A\S/ =~ e && !b.empty? にしないとい
けません。
こういう、直前がなんだったか、というのを考えなくていいという
のが gather_each の利点です。
あと、Buffer には status という機能がありますが、状態をどう
しても管理したいならレキシカルスコープの変数でいいんじゃない
でしょうか。たとえば、パラグラフの例は以下のように書いてもいい
わけです。
open("lib/scanf.rb") {|f|
status = nil
f.buffer {|e, b|
s = e == "\n"
b.flush if status != nil && status != s
status = s
b << e
}.each {|lines| pp lines }
}
そして、gather_each でも同様に状態は扱えて、ChangeLog のエン
トリは以下のように処理できます。(gather を使ってみました)
open("ChangeLog") {|f|
i = 0
f.gather {|l| i += 1 if /\A\S/ =~ l; i }.each {|lines| pp lines }
}
なお、私としてはこれを勧めているわけではなくて、ユーザがそう
いう状態遷移を考えなくて済むというのが良いと思っています。
つまり、専用のメソッを作るほうが、状態を考えなくていいので良
いと思います。
> 上記のインターフェースだと使用例のように区切りを渡さないことも
> できますし、 yield を追加の前にするか後にするかも自由です。また、
> status/status= を提供することで状態遷移を扱うことも支援できます。
gather_each でも、要素を結果から除去する指定は出来てもいいか
な、という気はします。そのための値を分類結果に定義しておけば
可能で、nil をその意味にするか、あるいは :delete あたりにす
るか、なにがいいかな。
buffer はいろんなことができるようにするという意図が感じられ
ますが、現実的な用途の想定として、どんなものが考えられますか?
私は、gather_each とあともうひとつ ChangeLog みたいなものを
処理するものがあると、かなりの範囲の用途を扱えるのではないか、
と考えています。その推測が正しければ専用のメソッドのほうが便
利でしょう。
--
[田中 哲][たなか あきら][Tanaka Akira]