ruby version 1.9.0 は開発版です。 以下にあげる機能は将来削除されたり互換性のない仕様変更がなされるかもしれません。 1.9.1 以降は安定版です。 バグ修正がメインになります。
記号について(特に重要なものは大文字(主観))
1.9.0 からメソッドと括弧の間にスペースを入れると常に警告がでるようになりました。
$ ruby -e 'p ("")' -e:1: warning: don't put space before argument parentheses ""
time.rb, parsedate.rb に追加 [ruby-talk:132815]
{|a| ...} や (do ... end) が proc として解釈されるようになりました。この機能は 実験的なものです。[ruby-dev:25780]
x = {|a| p a} x.call(4) # => 4 x = (do |a| p a end) x.call(9) # => 9
valueのエンコーディングを変換するメソッドを公開。
valueのエンコーディングは要素の内部エンコーディングからoutput_encoding=で設定したエンコーディングへ変換されます。
0.1.2 -> 0.1.3
継承するとエラーになるバグを修正。 [ruby-talk:126104]
src として ARGF も受け付けるようになりました。 [ruby-dev:25369]
read(0) は常に "" を返すようになりました。 また、nonblocking mode でも動作が変わらなくなりました。 [ruby-dev:25101]
Method#to_proc で作った Proc オブジェクトからメソッド y へと ブロックが引き渡されるようになりました。[ruby-dev:25031]
a[n,m]=nil は要素の削除ではなくなり、要素の並びを nil に入れ換えるようになりました。 zw-kdoo(2004-10-24)
feature が $" に追加されるタイミングが load された後に変わりました。 [ruby-list:40085]
[ruby-talk:113279] <URL:http://www.rubyist.net/~matz/20040922.html#p01>
省略可能な第二引数 pos が追加されました。マッチの開始位置を指定しま す。[ruby-core:03203], [ruby-core:03205]
p(/(.)/.match("foobar", 4).captures) # => ruby 1.9.0 (2004-07-17) [i586-linux] ["a"]
マッチ位置は文字列の先頭から数えられます。
p(/(.)/.match("foobar", 4).offset(0)) # => ruby 1.9.0 (2004-07-17) [i586-linux] [4, 5]
ブロックの結果を大小比較し、その最大値、最小値を示す要素を返します。
p [1,2,3,4,5].max_by {|v| -v} # => ruby 1.9.0 (2004-07-17) [i586-linux] 1 p [1,2,3,4,5].min_by {|v| -v} # => ruby 1.9.0 (2004-07-17) [i586-linux] 5
Marshal.dump により、タイムゾーンの情報保持するようになりました。
三重以上入れ子になった { } が動くようになりました。 [ruby-dev:23376]
p Dir.glob('{{{ruby}}}') #=> ruby 1.8.2 (2004-12-24) [i386-mswin32] [] #=> ruby 1.9.0 (2004-04-25) [i386-mswin32] ["ruby"]
{ } の中で '{' や '}' や ',' をエスケープできるようになりました。 [ruby-dev:23376]
p Dir.glob('{\,}') #=> ruby 1.8.2 (2004-12-24) [i386-mswin32] [] #=> ruby 1.9.0 (2004-04-25) [i386-mswin32] [","] p Dir.glob('{\{}') #=> ruby 1.8.2 (2004-12-24) [i386-mswin32] [] #=> ruby 1.9.0 (2004-04-25) [i386-mswin32] ["{"]
可能なら最初の引数に対して to_open を呼ぶようになりました。
pack("U") 時に、ユニコードとして不適切な値が来ているときは RangeError を投げるようになりました。 [ruby-dev:23281]
{:sym => val} を {sym: val} のように書くことができるようになりました。
File::FNM_PATHNAME がセットされている場合、**/ が */ の繰り返しとして働くようになりました。 [ruby-dev:22901]
Windows, DJGPP, EMX でも '\' をパスセパレータとして解釈せず、常にエスケープ文字として解釈するようになりました。 [ruby-dev:22974] [ruby-list:39337]
オプション :DoNotReverseLookup 追加。
追加
support WebDAV methods, PROPPATCH, LOCK, UNLOCK, OPTIONS, PROPFIND, DELETE, MOVE, COPY, MKCOL.
system 等と同様、第一引数に配列でコマンドを指定し た場合にシェルを経由せずに子プロセスを実行できるようになりました。 [ruby-dev:22877]
コマンドを実行できないときに例外が発生するようになりました。
p system("hogehoge") # => ruby 1.8.2 (2004-07-17) [i586-linux] false # => ruby 1.9.0 (2004-07-17) [i586-linux] -:1:in `system': No such file or directory - hogehoge (Errno::ENOENT) from -:1 p system("/tmp") # => ruby 1.8.2 (2004-07-17) [i586-linux] false # => ruby 1.9.0 (2004-07-17) [i586-linux] -:1:in `system': Permission denied - /tmp (Errno::EACCES) from -:1
シェルを経由する場合は、これまでどおりです。
p system("hogehoge ''") # => ruby 1.9.0 (2004-07-17) [i586-linux] sh: line 1: hogehoge: command not found false
Windows(のNT系列?)で File::FNM_CASEFOLD が指定された場合、全角英文字の大文字・小文字も区別しなくなりました。
Windows, DJGPP, EMX では、常に大文字・小文字を区別しなくなりました。また、File::FNM_CASEFOLD は指定できなくなりました。 [ruby-dev:22761]
U 以外のサイズのある整数指定子に大きな数を与えた場合 RangeError を 投げなくなりました。[ruby-dev:22654]
$ ruby -e 'p [2**32].pack("i")' "\000\000\000\000" $ ruby -e 'p [2**32].pack("U")' -e:1:in `pack': bignum too big to convert into `long' (RangeError) from -e:1
削除されました。[ruby-dev:22643]
SystemStackError が StandardError ではなく Exception の直下になりました。 [ruby-talk:89782]
パスを返します。
to_str を使わなくなりました。
Windowsで **/ がリパースポイントを辿らなくなりました。(シンボリックリンクと同じ扱い) [ruby-dev:22486]
Windows, DJGPP, EMX でマルチバイト文字に対応しました。 [ruby-dev:22476]
p File.fnmatch('?', 'あ') #=> ruby 1.8.2 (2004-12-24) [i386-mswin32] false #=> ruby 1.9.0 (2004-04-25) [i386-mswin32] true p File.fnmatch('?T', 'サ') #=> ruby 1.8.2 (2004-12-24) [i386-mswin32] true #=> ruby 1.9.0 (2004-04-25) [i386-mswin32] false
*1よくわからない