[#46184] [ruby-trunk - Bug #7095][Open] Non-recursive marking — "authorNari (Narihiro Nakamura)" <authorNari@...>
6 messages
2012/10/01
[#46189] [ruby-trunk - Bug #7100][Open] WEBrick::HTTPServer.new で BindAddress を指定しない場合に必ず警告が記録される — "sho-h (Sho Hashimoto)" <sho-h@...>
5 messages
2012/10/02
[#46203] [ruby-trunk - Bug #7111][Open] New build option to enable/disable global method caching — "shugo (Shugo Maeda)" <redmine@...>
5 messages
2012/10/06
[#46258] [ANN] 2.0.0 feature freeze — Yusuke Endoh <mame@...>
Japanese later; 日本語は後で
5 messages
2012/10/24
[#46309] [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX — "usa (Usaku NAKAMURA)" <usa@...>
13 messages
2012/10/29
[#46310] Re: [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX
— Tanaka Akira <akr@...>
2012/10/29
2012年10月29日 10:31 usa (Usaku NAKAMURA) <usa@garbagecollect.jp>:
[#46366] Re: [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX
— "U.Nakamura" <usa@...>
2012/11/02
こんにちは、なかむら(う)です。
[#46375] Re: [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX
— KOSAKI Motohiro <kosaki.motohiro@...>
2012/11/02
>> とくに指定しなければ、default external は locale から設定されるので、
[#46376] Re: [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX
— Urabe Shyouhei <shyouhei@...>
2012/11/02
On 11/02/2012 01:56 PM, KOSAKI Motohiro wrote:
[#46396] Re: [ruby-trunk - Bug #2154][Assigned] filesystem encoding of UNIX
— "U.Nakamura" <usa@...>
2012/11/05
こんにちは、なかむら(う)です。
[ruby-dev:46210] Module#refinements
From:
Shugo Maeda <shugo@...>
Date:
2012-10-09 01:55:26 UTC
List:
ruby-dev #46210
まつもとさん
前田です。
trunkにModule#refinementsというメソッドを追加したのですが、ささださんから
入れない方がよいのではないかという指摘があったので相談させてください。
これは、レシーバのモジュールにrefineで定義されたrefinementを、キーをrefine対象のクラス、
値をrefineする匿名モジュール(refineのブロック中のself)とするハッシュで返すメソッドです。
例えば、
class C1; end
class C2; end
module M
refine C1 do
$c1_ext = self
end
refine C2 do
$c2_ext = self
end
end
M.refinements #=> {C1 => $c1_ext, C2 => $c2_ext}
のような動作をするものです。
導入の理由の一つは、上記の$c1_extなどは匿名モジュールなのでアクセスしにくいため
リフレクションAPIがあった方が便利ではないかということです。
もう一つの理由は、以下のようにprependと組み合わせると、refinementsをグローバルに
有効にできるということです(そのためにリフレクションAPIがほしいということなので
結局同じ理由ですが)。
M.refinements.each do |klass, refinement|
klass.send(:prepend, refinement)
end
mathnをrefinementsで置き換えようとした時に、グローバルに有効にする方法がほしいと
むらけんさんに言われたことがきっかけです。
# prependしたモジュールはもとのクラスよりもメソッド探索時に優先されるので、まさに
# グローバルなrefinementのようなものだと思っています。
ささださんからは、実装に依存した機能なので、将来実装方法が変わったら困るのではないか
という指摘があったのですが、そもそもrefineのブロックで匿名モジュールをRubyレベルに
公開してしまっていますし、using Mでrefinementsを有効にできるためにはそれらの匿名
モジュールをMから辿れないといけないので、Module#refinementsを実装できなくなると
いうのは根本的に今の仕様とは別のものになるということだと考えています。
もちろん、そもそも今のrefinementsの仕様がどうなのかという話はあるでしょうし、今は
refinements自体がexperimentalという扱いなので、結局全部無かったことにする可能性も
あると思います。
--
Shugo Maeda