バージョン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