[#37892] 配列の重複検出用Hashの使いまわし — wanabe <s.wanabe@...>
ワナベと申します。
[#37898] [Bug #1105] Ruby1.9でのrescue節の例外ハンドラのマッチの処理 — Tatsuji Kawai <redmine@...>
Bug #1105: Ruby1.9でのrescue節の例外ハンドラのマッチの処理
[#37910] [Bug:1.9] lack consistency in hash iteration — Yusuke ENDOH <mame@...>
遠藤です。
まつもと ゆきひろです
[#37918] [BUG: 1.9] encoding warning — SASADA Koichi <ko1@...>
ささだです.
[#37921] [Feature:trunk] with_index_from — Yusuke ENDOH <mame@...>
遠藤です。
At Thu, 5 Feb 2009 23:18:49 +0900,
遠藤です。
At Fri, 6 Feb 2009 00:58:59 +0900,
[#37936] zombie processes by drb tests — Tanaka Akira <akr@...>
OpenBSD で、test-all をすると、drb のところで、テストに 100
[#37956] proposal: Module#method_adding — SASADA Koichi <ko1@...>
ささだです.
[#37959] [Bug:trunk] I can modify literals — Yusuke ENDOH <mame@...>
遠藤です。
[#37980] Re: [ruby-changes:10687] Ruby:r22250 (trunk): * iseq.c (simple_default_value): allow plain strings as default — SASADA Koichi <ko1@...>
ささだです.
[#37995] Add POSTARG support to rb_scan_args() — Akinori MUSHA <akinori.musha@...>
rb_scan_args()をPOSTARG対応にするパッチです。
[#37998] [Feature:1.9] {Array,Enumerable}#uniq_by, #uniq_by! — Nobuyoshi Nakada <nobu@...>
なかだです。
[#38005] Is URI.decode() broken? — MOROHASHI Kyosuke <moronatural@...>
もろはしです。いつもお世話になっております。
なかだです。
成瀬です、
xibbarこと藤岡です。
成瀬です。
NARUSE, Yui さんは書きました:
成瀬です。
(2009年03月03日 22:45), NARUSE, Yui さんは書きました:
成瀬です。
In article <[email protected]>,
成瀬です。
小崎@思いつきを適当に書いてみるテスト
In article <[email protected]>,
> In article <[email protected]>,
2009/09/07 14:38, Tanaka Akira wrote:
In article <[email protected]>,
[#38007] [Feature #1159] StringScanner に文字ベースでのインデックスを返すメソッドがほしい — Akira Matsuda <redmine@...>
Feature #1159: StringScanner に文字ベースでのインデックスを返すメソッドがほしい
[#38018] circular require in openssl — Tanaka Akira <akr@...>
以下のように、openssl には環状の require があり、警告が出ます。
In article <[email protected]>,
まつもと ゆきひろです
In article <[email protected]>,
[#38022] ENCODING_FIXED と ENCODING_NONE の廃止 — "NARUSE, Yui" <naruse@...>
成瀬です。
In article <[email protected]>,
成瀬です。
In article <[email protected]>,
[#38048] Add option hash support to rb_scan_args() — "Akinori MUSHA" <knu@...>
rb_scan_args() にoption hash対応を組み込むのはどうでしょうか。
[#38067] Re: [ruby-cvs:29304] Ruby:r22086 (trunk): * ruby.c (process_options): set initial default_external before -r. — "Yugui (Yuki Sonoda)" <yugui@...>
Yuguiです。
[#38075] [Bug #1198] corrupted iteratoin during "enum_for :inject" — Shyouhei Urabe <redmine@...>
Bug #1198: corrupted iteratoin during "enum_for :inject"
[#38080] [Feature:trunk] nested loop construct — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
ささだです.
[#38096] 多重代入やメソッド引数の展開でto_aが呼ばれます — nagachika <nagachika00@...>
nagachika と申します。
前田です。
まつもと ゆきひろです
[#38098] ブロック引数と括弧・引数なしsuper — Shugo Maeda <shugo@...>
前田です。
まつもと ゆきひろです
[ruby-dev:38095] Re: [Feature:trunk] nested loop construct
At Thu, 26 Feb 2009 14:52:05 +0900,
Yugui wrote:
> On 2/26/09 3:33 AM, Yukihiro Matsumoto wrote:
> > 検討事項は
> > * 名前。今回はnested loopということでnloopという名前で実装
> > したが、もっと適切な名前があるかもしれない。妙な短縮形よ
> > りも長くても記述的な名前を好む人も多いかも。Ruby(というか
> > 私)は前者を好む傾向はあるけど
>
> Array#productがカルテシアン積なので、それに合わせてEnumerator#productで
>
> nphi.product(ntheta).each {} や
インスタンスメソッド形式は、(Array#zip 等でも感じることですが)
3つ以上あるときに、本来対等な関係にも関わらず
v1.product(v2, v3)
とか
v, *vs = *vectors
v.product(*vs)
と「主」を立てないといけないのがどうも気に入らないんですよね。
その点、こちらは記法としては美しいと思います:
> (nphi * ntheta).each {}
しかし、 Enumerable の演算子とするのは現実的に不可能(Array#* 等と
衝突する)なので、結局は各オペランドを to_enum (each) してから演算
せざるを得ず、演算するため(だけ)にわざわざ変換するというのはやや
使い勝手に欠ける印象があります。
Enumerator のクラスメソッドで実装するのはどうでしょうか。
class << Enumerator
def product(*enums)
return to_enum(__method__, *enums) unless block_given?
return nil if enums.empty?
e, *es = *enums
if es.empty?
e.each { |x|
yield [x]
}
else
e.each { |x|
product(*es) { |xs|
yield [x, *xs]
}
}
end
nil
end
alias nest product
end
Enumerator.nest(1..3, 'a'..'c', [true, false]) { |x|
p x
}
もし簡潔さにこだわるなら、 {Class,Module}#* は今後ないだろうと
見切って alias * product してしまえば
Enumerator.*(1..3, 'a'..'c', [true, false]) { |x|
p x
}
と書けますね…。
ただ、演算子を導入し始めると、類推や一貫性への期待から次々と
新しい提案がなされ、利便性と理論的整合性の間で苦しみ続けることに
なるのではないかという懸念も持っています。
(cf. Feature #709 [ruby-core:19681])
なお、他に思いついたクラスメソッドは
Enumerator.transpose (synchronize)
Enumerator.join (<< or +)
などです。(前者は generator ライブラリの SyncEnumerator と同等)
--
Akinori MUSHA / http://akinori.org/