[#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:38399] Re: Enumerable#gather_each
At Sat, 9 May 2009 15:30:20 +0900,
Tanaka Akira wrote:
> というわけで、Enumerable#gather_each(arg) {|ary| ... } の提
> 案です。引数には Proc を与えて、これは各要素について呼ばれ、
> 結果として分類結果を返します。gather_each はその分類結果が等
> しい連続した要素を配列としてまとめて yield します。
>
> なお、分類結果が nil というのは特別扱いで、その要素は単独で
> まとまりとなることを示します。
少し仕様がわかりにくいように思います。繰り返しというストリームの
バッファという発想から、次のようなインターフェースを考案しました。
どうでしょうか。
class Enumerator
class Buffer
# status: 自由なメモ用途に提供
attr_accessor :status
def initialize(yielder)
@buffer = []
@yielder = yielder
@status = nil
end
# バッファに追加
def push(item)
@buffer.push(item)
end
alias << push
# バッファの最後の要素を取り出す
def pop
@buffer.pop
end
# バッファをクリア
def clear
@buffer.clear
self
end
# バッファが空かどうか
def empty?
@buffer.empty?
end
# バッファに溜まった要素数
def size
@buffer.size
end
# バッファの内容を yield してクリア
def flush
@yielder.yield(@buffer)
@buffer = []
nil
end
end
end
module Enumerable
def buffer(&block)
Enumerator.new { |yielder|
buffer = Enumerator::Buffer.new(yielder)
each { |*args|
case args.size
when 0
block.call(buffer)
when 1
block.call(args.first, buffer)
else
block.call(args, buffer)
end
}
buffer.flush unless buffer.empty? # ※終了時に自動flush
}
end
end
# 使用例:
# 要素をバッファに溜めていき、 nil が現れたら
# そこまでのまとまりを yield する
p [1,2,3,nil,4,5,nil,6].buffer {|e, b|
if e.nil?
b.flush
else
b << e
end
}.to_a
# 表示結果: [[1, 2, 3], [4, 5], [6]]
> なお、複数行をまとめる方法として使いそうなものは、まとめる先
> 頭要素を検出する方法を指定するとか、他にもいくつかあるように
> 思います。たとえば ChangeLog や mbox を扱うのには、先頭要素
> を指定するのがいいでしょう。そういうものはまた別のメソッドと
> して作るのがいいのではないかと思います。
上記のインターフェースだと使用例のように区切りを渡さないことも
できますし、 yield を追加の前にするか後にするかも自由です。また、
status/status= を提供することで状態遷移を扱うことも支援できます。
あとは、終了時のハンドラを定義すると上記の※印の代わりに実行
するようにするといいかなと思っています。
--
Akinori MUSHA / http://akinori.org/