バージョン1.9.0
Ruby1.9.0が出たのでちょっと試してみた。
クロージャ
irb> RUBY_VERSION => "1.9.0" irb> x = 100 => 100 irb> makeplus = lambda{|x| lambda{|y| x+y }} => #<Proc...> irb> plus1 = makeplus.call(1) => #<Proc...> irb> x => 100 #今まではここで x が 1 になってた。 irb> plus1.call(2) => 3
すばらしい。ちゃんと修正されている。
多言語化
irb> 'a'.methods.select{|i|i=~/enc/} => [:encoding, :force_encoding, :valid_encoding?, :encode, :encode!] #この辺がエンコード関係のメソッドか? irb> 'a'.encoding => #<Encoding:ASCII-8BIT> #encodingメソッドで保持しているエンコード情報が取れるようだ。 irb> 'a'.encoding.class => Encoding #エンコード値はEncodingクラスのインスタンスなようだ。 irb> Encoding.constants => [:ASCII_8BIT, :EUC_JP, :Shift_JIS, :SHIFT_JIS, :UTF_8, :ISO_2022_JP, :ASCII, :BINARY, :EucJP, :EUCJP, :SJIS, :US_ASCII] irb> Encoding::UTF_8 #個別のエンコードオブジェクト欲しいときはこれを使えばよさそう。 => #<Encoding:UTF-8> irb> 'a'.force_encoding(Encoding::UTF_8).encoding => #<Encoding:UTF-8> #force_encodingメソッドを使うと保持しているエンコード情報が変更出来るようだ。
本当に文字列オブジェクト自体がエンコード情報を持っているんだな。
Rubyの多言語化では、各文字列に対してエンコード情報を保持する方式(CSI:Code Set Independent)で行われる予定です。
http://www.thinkit.co.jp/cert/article/0709/26/2.htm