2012-03-06 61 views
2

我不明白在Ruby中如何使用#{...}結構。在Ruby中如何使用#{...}構造?

我已經看到了在正規表達式例如用在http://www.ruby-doc.org/core-1.9.3/Regexp.html

place = "tokyo" 
/#{place}/.match("Go to tokyo") 
    #=> #<MatchData "tokyo"> 

到底這是什麼#{...}功能調用,沒有人知道這一些良好的工作的例子。

真的很感謝幫助。

謝謝!

+0

這是用於雙引號或斜槓內的內聯Ruby代碼。 '「#{1 + 1}」'=>'「2」' – fl00r 2012-03-06 12:31:46

回答

6

這裏,這是一個有點簡單的例子:

place = "Tokyo" 
puts "Go to #{place}" 

什麼#{...}構造的目的是執行它包含的ruby代碼,並返回結果的字符串表示,然後嵌入到字符串中的co nstruct出現。

又如:

place = "Tokyo" 
puts "#{place} is a #{place.class} of #{place.length} characters" 

換句話說,你的例子是等價於:

/tokyo/.match("Go to tokyo") 

希望這有助於。

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