Programming log - Shindo200

イベント参加記録とプログラミング系の雑記

Ruby 2.1.0 の新機能を試す

2013年12月25日に ruby 2.1.0 がリリースされました。早速、rbenv で Ruby 2.1.0 をインストールしてみます。homebrew から入手した ruby-build-HEAD では、まだ Ruby 2.1.0 がインストールできませんので、 github から ruby-build の最新版を入手して、Ruby 2.1.0 をインストールします。

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ cd ruby-build
$ ./install.sh
$ ruby-build -v
ruby-build 20131225.1
$ rbenv install -l |grep 2.1.0
ruby-2.1.0
$ rbenv install 2.1.0

Ruby 2.1.0 に切り替えます。

$ rbenv global 2.1.0
$ ruby -v
ruby 2.1.0p0 (2013-02-24 revision 39474) [x86_64-darwin11.4.2]

変更点

Decimal/Complex リテラル

Ruby 2.0.0 まで「1/3」のような有理数を扱いたい場合、Rational(1, 3) と書いて、有理数を扱うクラス Rational のオブジェクトを生成していましたが、Ruby 2.1.0 から以下のように書くことができるようになりました。

r = 1/3r
p r
# => (1/3)
p r == Rational(1, 3)
# => true

また、虚数を扱いたい場合、以下のように書くことができるようになりました。

i = 42i
p r
# => (0+42i)
p i == Complex(0, 42)
# => true

def 式の返り値

Ruby 2.0 までは def 式は nil を返していましたが、Ruby 2.1 から定義したメソッド名のシンボルを返すようになりました。

# Ruby 2.0 まで
p def foo; end
# => nil

# Ruby 2.1 から
p def foo; end
# => :foo

ruby-trunk のチケットを見ると、次のような書き方をできるようにしたいからシンボルを返すようにしたそうです。Ruby 以外のオブジェクト指向プログラミング言語を触ったことがある方には、馴染みがある書き方かもしれません。

class Foo
  private def foo
    # ...
  end
end

# Ruby 2.0 までは TypeError.
# Ruby 2.1 からは private :foo を実行してくれる

String#scrub

文字列内の不正なバイト列だけを別の文字に置換するメソッド String#scrub が追加されました。

str = "pat\xFF\xFF\xFF"
p str.scrub("*")
# => "pat***"

標準添付ライブラリ Curses を削除

C curses というコンソール画面の制御を行うライブラリを利用して、画面に文字を表示したり、マウスの位置情報を取得したりする機能を持ったライブラリ CursesRuby 2.1.0 で削除されました。Ruby 2.1.0 でライブラリ Curses を使いたい場合は、https://github.com/shugo/curses をインストールしてください。

まだまだ他にもあるのですが、とりあえずここまでにします。