本を読む

読書やコンピュータなどに関するメモ

Ruby 1.9のSimpleDelegatorの挙動が変わっていた

 Rubyの開発版を使っている人には周知のことなんだろうけど、リリース版のRuby 1.9.1をp378からp429にアップデートしたらSimpleDelegatorの挙動が変わった。

# hoge.rb
require 'delegate'

class Foo < SimpleDelegator
  def initialize
    super({})
  end

  def hoge
    puts 'hoge!'
  end
end

Foo.new.hoge
$ ruby hoge.rb
hoge.rb:14:in `<main>': undefined method `hoge' for {}:Foo (NoMethodError)

 delegate.rbやChangeLogを見る限り、SimpleDelegatorを継承したクラスにはメソッドを追加できなくなっているようだ。対策として、SimpleDelegatorをDelegateClass()に置きかえる。

4c4
< class Foo < SimpleDelegator
---
> class Foo < DelegateClass(Hash)
$ ruby hoge.rb
hoge!

修正2010-07-06:タイトル誤記修正 SimpleDelegate→SimpleDelegator

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/780-042585a1

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad