我不明白在Ruby中如何使用#{...}构造。
我在http://www.ruby-doc.org/core-1.9.3/Regexp.html
的正则表达式示例中使用过place = "tokyo"
/#{place}/.match("Go to tokyo")
#=> #<MatchData "tokyo">
这个#{...}功能究竟到底是什么,并且有人知道一些好的工作示例。
非常感谢帮助。
谢谢!
答案 0 :(得分:6)
这是一个更简单的例子:
place = "Tokyo"
puts "Go to #{place}"
#{...}
构造的作用是执行它包含的ruby代码,并返回结果的字符串表示,然后将其嵌入到构造出现的字符串中。
另一个例子:
place = "Tokyo"
puts "#{place} is a #{place.class} of #{place.length} characters"
换句话说,您的示例等同于:
/tokyo/.match("Go to tokyo")
希望这有帮助。
答案 1 :(得分:3)
被称为插值,并允许您将占位符转换为它们所代表的值...
答案 2 :(得分:1)
#{...}
特别有用,在元编程中使用了很多。它可以帮助您动态调度方法,而无需在运行时知道这些方法的名称。
if conf.rc and File.exists?( conf.rc )
YAML.load_file(conf.rc).each do |k,v|
conf.send("#{k}=" , v)
end
end
如您所见,直到运行时我们不知道将要分派哪些方法。通过.send
和#{...}
,我们可以动态调度方法。例如,在上面的代码中,取决于conf.rc
中的值,可以调度不同的方法。
示例取自Metaprogramming Ruby。