むとうです。

Ruby GetText Package(以降gettext)を使ってて思ったのですが、
文字列の式展開をする前の文字列を取得するうまい方法って
ありませんでしょうか?(うーん、変な文章ですね....)

うまく説明できないのでコードを書いてみますと....。

(1)
 hash = Hash.new
 hash["The value is %d\n"] = "値は%dです。\n"

 num = 1
 printf(hash["The value is %d\n"], num) #→ 値は1です。


(2)
 hash = Hash.new
 hash["The value is #{num}\n"] = "値は#{num}です。\n"

 num = 1
 print(hash["The value is #{num}\n"])

(1)は良いのですが、Rubyの式展開を使った(2)の場合は「値は1です。」
になりません。
(1)では"The value is %d\n"をキーワードとしてハッシュに登録できる
のですが、(2)では"The value is \n"がキーワードとしてハッシュに
登録されてしまい、かつ、"The value is 1\n"で検索してしまいます。

ものすごく当たり前の話をしているかもしれませんが、
希望としては、"The value is #{num}\n"を、文字列自体をエスケープ
等をすることなく、そのままキーワードにし、上記例では「値は1です。」
という結果を取得したいです。
#が、それをうまく保持するうまい方法が思いつきません。

なんとなく以下のようなことを考えてみたのですが、
以下の感じだと、String#initializeって呼び出されないんです
よね(当たり前か(^^;))。

class String
  def initialize(str)
    @key = str  # -> "The value is #{num}\n"
    super
  end
end

num = 1
p "The value is #{num}\n"  # -> "The value is 1\n"


何かうまい方法ってないでしょうか。

それでは。

-- 
.:% Masao Mutoh<mutoh / highway.ne.jp>