まつもと ゆきひろです

In message "[ruby-list:15059] Re: 複雑?な構造体の定義方法"
    on 99/06/21, Koichi Shigematsu <shige / ecc.denso.co.jp> writes:

|> この問題ならば別に構造体を作らなくてもObjectのインスタンスを
|> 作って、evalかなにかで特異メソッドを追加していくだけでよいの
|> ではないかと思いますが、やりたいことがもっとはっきりすると答
|> えももっとはっきりするでしょう。
|はいっ。 試してみます! と言いたいのですが、ちょっと「宇宙語」になって
|しまいました。  どこかに例題など有りませんでしょうか?
|#完全にRubyの勉強不足ですね。 <- でも頑張ります。

ヒントがないとかわいそうでしょうから、とりあえず出発点になり
そうなスクリプトを(eval使ってないけど)。

class Entry
  def initialize(name, para, opt, x, y)
    @name = name
    @para = para
    @opt = opt
    @x = x
    @y = y
    @data = {}
  end
  attr_reader :para, :opt, :x, :y
  def [](idx)
    @data[idx]
  end
  def []=(idx, data)
    @data[idx] = data
  end
end

comp = {}
last = nil
while gets
  chomp!
  if /Table *= *(\w+) */
    last = comp[$1] = Entry::new($1, *$'.split)
  elsif last and /subtable *= *(\d+) */
    last[Integer($1)] = $'
  end
end

print "opt0 \n" if(comp["name0"].opt == "opt0")
xx=comp["name1"].x            # -> x1をxxに代入
yy=comp["name1"].y            # -> y1をyyに代入
p xx
p yy
p comp["name1"].para          # -> "para2"を出力
p comp["name2"][8]            # -> "str21"を出力