[#42945] [Ruby 1.8-Bug#4231][Open] configure.bat --with-winsock2 が socket/extconf.rbに効いていない — Masahiro Kitajima <redmine@...>

Bug #4231: configure.bat --with-winsock2 が socket/extconf.rbに効いていない

8 messages 2011/01/05

[#43027] [Ruby 1.9-Feature#4280][Assigned] SJIS should be an alias of Windows-31J, not of Shift_JIS — Usaku NAKAMURA <redmine@...>

Feature #4280: SJIS should be an alias of Windows-31J, not of Shift_JIS

13 messages 2011/01/14
[#43030] [Ruby 1.9-Feature#4280] SJIS should be an alias of Windows-31J, not of Shift_JIS — Motohiro KOSAKI <redmine@...> 2011/01/14

チケット #4280 が更新されました。 (by Motohiro KOSAKI)

[#43031] Re: [Ruby 1.9-Feature#4280] SJIS should be an alias of Windows-31J, not of Shift_JIS — "U.Nakamura" <usa@...> 2011/01/14

こんにちは、なかむら(う)です。

[#43033] Re: [Ruby 1.9-Feature#4280] SJIS should be an alias of Windows-31J, not of Shift_JIS — KOSAKI Motohiro <kosaki.motohiro@...> 2011/01/14

2011年1月14日16:35 U.Nakamura <usa@garbagecollect.jp>:

[#43039] ext/openssl development repository — Hiroshi Nakamura <nakahiro@...>

W3J1YnktY29yZTozNDQxNl3jga7ml6XmnKzlkJHjgZHniYjjgafjgZnjgIIKCuacgOi/kU1hcnRp

21 messages 2011/01/14
[#43040] Re: ext/openssl development repository — "U.Nakamura" <usa@...> 2011/01/14

こんにちは、なかむら(う)です。

[#43041] Re: ext/openssl development repository — Yusuke ENDOH <mame@...> 2011/01/14

遠藤です。

[#43053] Re: ext/openssl development repository — Hiroshi Nakamura <nakahiro@...> 2011/01/17

MjAxMS8xLzE0IFl1c3VrZSBFTkRPSCA8bWFtZUB0c2cubmUuanA+Ogo+Pj4gwqAgwqAgwqAgwqAg

[#43092] pthread_cond を用いたConditionVariable — keiju@... (Keiju ISHITSUKA)

けいじゅ@いしつかです.

15 messages 2011/01/24

[ruby-dev:43126] Re: Hashのイテレーション中の新規キー追加

From: "Y. NOBUOKA" <nobuoka@...>
Date: 2011-01-27 10:14:33 UTC
List: ruby-dev #43126
信岡です。

> ここで戻って 1.9 向けのパッチ後の挙動がどうあるべきかを考えると、現在の 1.9 の仕様として、
> * 1.9 の Hash#each は挿入順で評価される(仕様)
> があるので、あるべき挙動は、
> * each 中のハッシュへの要素追加を常に許す
> * 追加した要素は最後に評価する
> となるべきだ、というのは割と合意の取れる線かなぁと思います。

そうですね、私も上記の仕様になるべきかなぁと思います。

> 近永さんのkeys.eachや成瀬さんの
>
> class Hash
>  def each
>   keys = hash.keys
>   keys.each do |key|
>     yield(key, hash[key]) if hash.key?(key)
>   end
>  end
> end
>
> などはeach評価中に追加した要素は同じeach中に評価されません。
> 基本的にはeach中に評価される要素とeach回数を制御する要素を
> 分離していることによる解決方法だと言えると思います。

ちょっと邪道かもしれませんが、[]=
メソッドをオーバーライドしてイテレーション中に追加された要素もキーの配列に追加するようにすれば期待通りの動作になると思います。 Ruby
1.9 trunk 向けのパッチを考えられるとのことですが、現状の Ruby (1.9.2 以下)
において期待する動作をさせたい場合は次のようなコードを使えばとりあえずは動くはずです。

# Hash を拡張するモジュールの定義
module MyHashExtension
  def []=( key, val )
    super( key, val )
    if @keys and not self.has_key? key then
      @keys << key
    end
  end
  def each
    @keys = self.keys
    @keys.each do |k|
      yield k, self[k] if self.has_key? k
    end
    @keys = nil
  end
  alias :each_pair :each
end

# 以下サンプル
h = {}.extend MyHashExtension
h[1] = 2

# イテレーション中に追加された要素もイテレーションに組み込まれる
h.each do |k,v|
  h[k+1] = v*2 if v < 10000000000
  $stdout << "#{k}: #{v}\n"
end

-- 
信岡 ゆう (NOBUOKA Yu)
http://www.vividcode.info/

In This Thread