過去の遺物

以下に挙げる変数名、メソッド名、オブジェクト名は古い名前です。 使用すると、警告が出たり、ある日突然なくなったりするかもしれません。

メソッド Object#type

1.7 では、警告が出ます。代わりに Object#class を使用してください。

p Object.new.type
=> -:1: warning: Object#type is deprecated; use Object#class
   ruby 1.7.3 (2002-10-08) [i586-linux]
   Object
メソッド Object#to_a

self を要素とする配列を返していましたが、この挙動はなくなるようです。 1.7 では、警告がでます。

p Object.new.to_a
-:1: warning: default `to_a' will be obsolete
ruby 1.7.3 (2002-09-05) [i586-linux]
[#<Object:0x401a88ac>]
メソッド FileTest.exists?

FileTest.exist? の別名ですが、使用は推奨されないよう です。おそらく Ruby におけるメソッド名の命名規則からだと思います。 rubyist:1194[外部]

メソッド indexes, indicies (Array, Hash, ENV)

version 1.7 では、使用すると

warning: Array#indexes is deprecated; use Array#select

と警告が出ます。

ということからだそうですruby-dev:16084[外部]

ruby-talk:10830[外部], ruby-talk:11066[外部], ruby-dev:16082[外部] などで議論が起こっていました。

警告メッセージにあるように select がその候補になっています。

NotImplementError

NotImplementedErrorの旧称

version 1.7では、旧称は削除されました。

MatchingData

MatchDataの旧称

メソッド Array#filter

Array#collect! に置き換えられました。

このメソッドを使用すると警告メッセージが出ます。 (1.7 ではこのメソッドはなくなりました。)

メソッド Time.times

version 1.7 から Process.times に移動しました。version 1.7 で Time.times を使用すると警告メッセージが出ます。

関数 iterator?

メソッドに付いたブロックが必ずしも繰り返さないことからイテレータはブ ロック付きメソッドの総称ではなくなりました。そのためブロック付きで呼 ばれたかどうかの判断は関数 block_given? に名称が変更されました。

が、イテレータという用語自体は依然使われ続けています。(このマニュア ルでも使っています)そのためこの関数が消えることもないかもしれません。

正規表現の //p オプション

p オプションはなくなりました(1.6 では使用すると警告が出ます。1.7から は完全になくなりました)。入れ代わりに m オプションが導入されましたが これは p オプションとは意味がまったく違います。

正規表現の p および m オプションの違い

//p はメタ文字 ".", "^", "$" の意味を変えるオプションでしたが、 //m は "." の意味だけを変えます("." が改行にマッチするようになる)。 //p は、定義が複雑であること、//m と 正規表現 \A \Z を使って表現可能 であることから廃止されました。詳細はruby-list:22483[外部]を参照のこと。

組込み変数 $~, $!

なくなることはないと思いますが、基本的に使わないのが最近のスタイルです。 (少なくとも増えることはないそうです) これら特殊変数を使わないようにするために追加されたメソッドや文 法が存在します。(Regexp.last_match, Process.waitpid2, rescue => var など)

だからといって、無理に特殊変数を使わないようにする必要はありません。 各人の好みに応じて使い分けてください。

なお、$=(文字列の比較における大文字小文字の無視)は、使いにくい という理由から obsolete であることが明言されました (ruby-dev:12978[外部])。version 1.7 では警告が出ます。

$= = 1
=> ruby 1.7.1 (2001-06-12) [i586-linux]

=> -:1: warning: modifying $= is deperecated
   ruby 1.7.1 (2001-07-31) [i586-linux]

version 1.7 では、文字列のハッシュ値は、$= の値に依存しなくなっています。 ruby-bugs-ja:PR#61[外部]

str = "foobar"

$= = false
a = str.hash
$= = true
b = str.hash
p a,b

=> ruby 1.6.4 (2001-07-31) [i586-linux]
   594908901
   -24977883

=> -:3: warning: modifying $= is deperecated
   -:5: warning: modifying $= is deperecated
   ruby 1.7.1 (2001-08-06) [i586-linux]
   594908901
   594908901
組込み定数 TRUE,FALSE,NIL

(一部憶測を含む解説)

昔も今もこれらは定数であり値(オブジェクト)ではありませんが、(はるか) 昔は、true, false, nil を参照するにはこれらの定数を通してしか行えま せんでした。現在、疑似変数 true, false, nil によっ て直接これらの特殊なオブジェクトを参照することが出来るためわざわざ定 数を使う必要はなくなりました。(疑似変数はパーサが解釈するのでほんの わずか速いかもしれません:-)

大文字をこよなく愛する汎用機系の人(偏見)は使い続けても問題ないでしょ う:-)

組込み定数 VERSION,RELEASE_DATE,PLATFORM

RUBY_VERSION,RUBY_RELEASE_DATE,RUBY_PLATFORMの旧称。

ObjectSpace.add_finalizer
ObjectSpace.remove_finalizer
ObjectSpace.call_finalizer
ObjectSpace.finalizers

使用すると warning が出ます。これらのメソッドは以前 final.rb で提供 されていた

ObjectSpace.define_finalizer
ObjectSpace.undefine_finalizer

が組み込まれたことによって obsolete になりました(従って、final.rb も obsolete になりました)。