From: matz@... (Yukihiro Matsumoto) Date: 1998-07-24T11:24:34+09:00 Subject: [ruby-list:8847] Re: mapping a tagged file onto a class まつもと ゆきひろです In message "[ruby-list:8845] mapping a tagged file onto a class" on 98/07/24, Takao KAWAMURA writes: |各行にフィルード名と値が含まれ、レコードの区切りは空行という、 |よくあるタイプのテキストデータベースがありますよね。ええと、 | |DATABASE : (RECORD "\n")* |RECORD : (FIELD "\n")* |FIELD : KEY "\t" VALUE | |でいいのかな? (KEY,VALUEは文字列) えーと,shift reduce conflictになるんですけど.^^;;; あ,「レコードの区切りは空行」だから |DATABASE : (RECORD "\n\n")* なのかな. |こういうテキストデータベースを読んで、各レコードをインスタン |スにし、各KEYをインスタンス変数にしたいのです。 どーしてもインスタンス変数にしたいですか? なんとなく,ハッ シュに格納した方が自然な気がするんですが.それなら def initialize(record) @fields = {} key = value = nil record.each_line do |l| l.chomp! key,value = l.split("\t") @fields[key] = value end end なんて感じになると思うのですが.テストはしてませんのでイメー ジとして捉えて欲しいのですが,これなら妙なevalは不要ですよね. インスタンス変数にしちゃうとattrかevalを使わないとアクセスで きませんから使い勝手が悪いと思います. |それと、Perl版より倍遅いので輪郭をとってみようと思っているの |ですが、そういうツールはありましたっけ? 輪郭って profile のことですよね.profilerはまだ作ってません. デバッガと同じ仕組みをつかえばできるはずなんですけどね. なお,仕事の内容によるのですが,残念ながら現状ではPerlをその まま移植したコードが数割増しから2倍ってのは比較的典型的な速 度比です. まつもと ゆきひろ /:|)