[Ruby]Ruby でクラス継承

SWF は Header とそれに続く沢山の Tag で構成されている。

| Header | Tag1 | Tag2 | ... | Tag(End) |

Tag はコンテンツの種類(画像なのか音声なのか文字なのか。とか)毎に
中身(のデータ構造)が異なるので、Tag を継承させて Tag_DefineBitsJPEG
とか Tag_DefineSound みたいに実装していきたい。

てな訳で、クラス継承のお勉強。

出来たもの

Signature=FWS Version=4 FileLength=2704
RECT: (bits=14) (0, 0) - (240, 240)
FrameRate=8.0 FrameCount=40
Type=9(Unknown) Length=3
<略>
Type=1(Unknown) Length=0
Type=0(End) Length=0

それっぽく出来た。

クラス継承の仕方

class SWF_Tag
end

class SWF_Tag_End < SWF_Tag
  def initialize(bit_in, length)
    @Content = bit_in.get_string!(length)
  end
end

Foo_Baa < Foo という記法で OK

クラス名の文字列からオブジェクト生成

class Foo
  def initialize(foo)
  end
end

className = "Foo"
foo = <コンストラクタに渡したい適当な値>
klass = Object.instance_eval("#{className}.new(foo)")

こんな感じ。