将哈希值与ruby中字符串的键/值合并

Laz*_*son 6 ruby string hash merge

我正在尝试将哈希与ruby中字符串的键/值合并.

h = {:day => 4, :month => 8, :year => 2010}
s = "/my/crazy/url/:day/:month/:year"
puts s.interpolate(h)
Run Code Online (Sandbox Code Playgroud)

我发现的只是迭代键并替换值.但我不确定是否有更好的方法呢?:)

class String
  def interpolate(e)
    self if e.each{|k, v| self.gsub!(":#{k}", "#{v}")}
  end
end
Run Code Online (Sandbox Code Playgroud)

谢谢

Mar*_*mas 7

无需重新发明Ruby内置插件:

h = {:day => 4, :month => 8, :year => 2010}
s = "/my/crazy/url/%{day}/%{month}/%{year}"
puts s % h
Run Code Online (Sandbox Code Playgroud)

(注意这需要Ruby 1.9+)


Mic*_*lat 5

"更好"可能是主观的,但这是一种只使用一次调用的方法gsub:

class String
  def interpolate!(h)
    self.gsub!(/:(\w+)/) { h[$1.to_sym] }
  end
end
Run Code Online (Sandbox Code Playgroud)

从而:

>> "/my/crazy/url/:day/:month/:year".interpolate!(h)
=> "/my/crazy/url/4/8/2010"
Run Code Online (Sandbox Code Playgroud)