1

Arrayをスーパークラスとして匿名クラスを作成すると、Arrayメソッド<<および[]=が継承されません。以下の私のコード

class SubArray < Array
end

sa = SubArray.new
sa << "foo"
puts sa.inspect

sa_meta = Class.new(Array)
sa_meta << "foo"
puts sa_meta.inspect

結果を出します:

["foo"]
lib/so_example1.rb:9:in `<main>': undefined method `<<' for #<Class:0x6b10b8e4> (NoMethodError)

私のルビーバージョンは:

ruby 1.9.3p194 (2012-04-20 revision 35410) [i386-darwin11.4.2]

スーパークラスを使用して動的にクラスを作成するにはどうすればよいですか?

4

1 に答える 1

6

Array メソッドの << と []= は継承されません

確かにそうです!クラスのインスタンスを作成することを忘れないでください。

sa_meta_klass = Class.new(Array)
sa_meta = sa_meta_klass.new
sa_meta << "foo"
puts sa_meta.inspect
# >> ["foo"]
于 2013-02-19T12:50:39.997 に答える