From: Wakou Aoyama Date: 2000-09-12T07:15:28+09:00 Subject: [ruby-list:24919] Re: file から読み込んだ文字列の #{} 青山です。 ちょっと古いですが。 On Tue, 4 Jul 2000 18:18:47 +0900, "Masao Shirakura" wrote: > > text file中に #{} を書いておいて、それを Rubyで読み > > 込んだときに式展開させる方法はないでしょうか? > > 私は eval を使っています。 > > file.each do |str| > p eval("\"#{str}\"") > end > > もっと安全でいいやりかたがあるのかもしれませんが 私は Hash を使っています。 val = 1 public_values = {"val"=>val} file.each() do |buf| p buf.gsub(/\#{(.*?)}/){ public_values[Regexp::last_match[1]] } end Regexp::last_match[1] は 1.4 系では $1 ですね。 利点は、eval より安全。公開する変数を選択できる。実際の変数名と、公開 する名前を別にする事もできる。gsub で置換しているだけなので、埋め込み 用の記述を <%var%> とか、好きなように変更できる。というあたりでしょうか。 欠点は、任意の Ruby の式を展開するのは困難。公開したい変数をあらかじめ Hash で用意する必要がある。Hash で変数名を用意する時や、マッチ用のパター ンの記述などにミスがあると、うまく展開されない部分ができる可能性がある。 というあたりでしょうか。 -- 青山 和光 Wakou Aoyama