2011年2月 2日

[ruby-list:47820] Re: Ruby 1.9 Range オブジェクトのメンバテスト挙動について

きしもとです

報告ありがとうございます。
が、一点。関係ない話題のメールへのリプライで送らないようにしてください。
[ruby-list:47817] へのリプライになっていました。

====

仕様変更にあたると思うのですが、Time#succ が 1.9 では obsolete に
なっています。doc/ChangeLog-1.9.3 に、

* time.c (rb_time_succ): make Time#succ obsolete since time is not
a discrete value.

とあります。本の記述に従うとすると、数値でもないし離散値でもない
(なくなった)ので、Range の端点として使えなくなった、ということ
だと思います。

On Wed, 2 Feb 2011 00:45:12 +0900
__JC__ <02ybur@xxxxx> wrote:
> JC と申します。初めまして。
>
> Time オブジェクトを端点に持つ Range オブジェクトの挙動が
> ruby 1.8 と ruby 1.9 で異なりました。 1.8 と 1.9 の仕様の
> 違いの問題かとも思いましたが、念のため報告いたします。
>
> ## コード (eg.rb)
> t0 = Time.now
> t1 = t0 + 1
> t2 = t0 + 2
> puts (t0..t2).include?(t1)
>
> ## コード実行結果 (ruby 1.8.7)
>
> ~/ > /usr/bin/ruby --version
> ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
> ~/ > /usr/bin/ruby eg.rb
> true
>
> ## コード実行結果 (ruby 1.9.2)
> ~/ > /usr/local/bin/ruby --version
> ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-darwin10.6.0]
> ~/ > /usr/local/bin/ruby eg.rb
> eg.rb:4:in `each': can't iterate from Time (TypeError)
> from eg.rb:4:in `include?'
> from eg.rb:4:in `include?'
> from eg.rb:4:in `<main>'
>
> ruby 1.9 の include? は Range の端点が数値の時は、1.8 と同様に連続範囲
> メンバテストを行い、端点が数値でなければ離散範囲メンバテストを行うと本にも書いて
> ありますので(プログラミング言語 Ruby D.Flanagan氏, Matz氏; O'REILLY p.74)、
> その意味では上記は本にも書いてある通りの挙動をしています。
>
> 仕様の問題ですので、ポストするか多少悩みましたが、case 等値 === にも影響して
> おりますので念のため報告いたしました。


投稿者 xml-rpc : 2011年2月 2日 08:22
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/101728
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。