Bug #2179
closed
1.9.2において block のスコープがおかしいときがある
Added by takkanm (三村 益隆) about 15 years ago.
Updated over 13 years ago.
ruby -v:
ruby 1.9.2dev (2009-10-06 trunk 25243) [i386-darwin9.8.0]
[ruby-dev:39439]
Description
=begin
rubyspecを流しているときに気づいたのですが、
ruby1.9.2 の trunk(rev 25243) にて blockのスコープが正しく動いてないように見えます。
対応するrubyspecは core/string/upto_spec.rb:21¶
% ruby -v
ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-darwin9.8.0]
% irb
ruby-1.9.1-p243 > a=[]; "25".upto("5"){|s|a<<s}; a
=> ["25"]
% ruby -v
ruby 1.9.2dev (2009-10-06 trunk 25243) [i386-darwin9.8.0]
% irb
ruby-1.9.2-head > a=[]; "25".upto("5"){|s|a<<s}; a
=> []
ただし、以下のケースだと正しく動いているようです。
ruby-1.9.2-head > a=[]; (1..10).each{|i| a<<i}; a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
=end
=begin
いまいです。
From: 益隆 三村 <redmine_at_ruby-lang.org>
Date: Tue, 6 Oct 2009 21:14:10 +0900
rubyspecを流しているときに気づいたのですが、
ruby1.9.2 の trunk(rev 25243) にて blockのスコープが正しく動いてないように見えます。
対応するrubyspecは core/string/upto_spec.rb:21¶
% ruby -v
ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-darwin9.8.0]
% irb
ruby-1.9.1-p243 > a=[]; "25".upto("5"){|s|a<<s}; a
=> ["25"]
% ruby -v
ruby 1.9.2dev (2009-10-06 trunk 25243) [i386-darwin9.8.0]
% irb
ruby-1.9.2-head > a=[]; "25".upto("5"){|s|a<<s}; a
=> []
これはブロックが一度も評価されてないからですね。
$ ruby1.9.1 -ve '"25".upto("5"){raise}'
ruby 1.9.1p243 (2009-07-16 revision 24175) [i486-linux]
-e:1:in block in <main>': unhandled exception from -e:1:in
upto'
from -e:1:in `'
$ ruby1.9 -ve '"25".upto("5"){raise}'
ruby 1.9.2dev (2009-10-03 trunk 25201) [i686-linux]
両端が数値とみなせるときの String#upto の挙動の変更によるものだと思い
ます。これは書いておいた方がよいと思うので、パッチを書いてみました。
Nobuhiro IMAI nov@yo.rim.or.jp
Key fingerprint = F39E D552 545D 7C64 D690 F644 5A15 746C BD8E 7106
Index: string.c¶
--- string.c (revision 25243)
+++ string.c (working copy)
@@ -2863,6 +2863,14 @@
*
-
-
- If str and other_str contains only ascii numeric characters,
-
- both are recognized as decimal numbers. In addition, the width of
-
- string (e.g. leading zeros) is handled appropriately.
-
-
-
-
-
"07".upto("11").to_a => ["07", "08", "09", "10", "11"]
*/
static VALUE
=end
- Status changed from Open to Closed
- % Done changed from 0 to 100
=begin
Applied in changeset r25249.
=end
=begin
ミムラです。
2009年10月6日22:04 Nobuhiro IMAI nov@yo.rim.or.jp:
これはブロックが一度も評価されてないからですね。
$ ruby1.9.1 -ve '"25".upto("5"){raise}'
ruby 1.9.1p243 (2009-07-16 revision 24175) [i486-linux]
-e:1:in block in <main>': unhandled exception from -e:1:in
upto'
from -e:1:in `'
$ ruby1.9 -ve '"25".upto("5"){raise}'
ruby 1.9.2dev (2009-10-03 trunk 25201) [i686-linux]
両端が数値とみなせるときの String#upto の挙動の変更によるものだと思い
ます。これは書いておいた方がよいと思うので、パッチを書いてみました。
なるほど。数値のときの挙動に合わせるようになっていたのですね。
対応ありがとうございました。
=end
Also available in: Atom
PDF
Like0
Like0Like0Like0