2017-06-20 17 views
0

考慮到這一點Ruby代碼:爲什麼不帶鍵的格式化字符串會自行返回?

format_string = "%{greeting}, %{name}" 

puts format_string %{greeting: "Hi", name: "John"} # <-- returns "Hi, John" 
puts format_string         # <-- returns "%{greeting}, %{name}" 
puts format_string %{greeting: "Hi"}  # <-- returns key{name} not found (KeyError)" 

,因爲它缺少一個關鍵下面的代碼產生錯誤。

puts format_string %{greeting: "Hi"} # returns "key{name} not found (KeyError)" 

雖然下面的代碼返回FORMAT_STRING變量的精確值,儘管它缺少這兩個鍵。我希望這個值等於零,或者導致像上面的代碼一樣的錯誤。

puts format_string  # returns "%{greeting: "Hi", name: "John"}" 

我在尋找如何以及爲什麼會返回精確值的解釋,在沒有密鑰或變量被設置爲字符串。 我已經閱讀了紅寶石文檔和與ruby格式有關的多個網頁,但我一直未能找到答案。

回答

1

您:

puts format_string 

打印format_string因爲這是puts一樣。通過String#%方法完成格式(並且抱怨丟失的鍵) puts不解釋字符串中的%{...}事情,%運算符會這樣做。也許把它分成兩個步驟(並且是與你的空白更一致)將闡明你的東西:

formatted_string = format_string % {greeting: "Hi", name: "John"} 
# -------------------------------^ Just an operator like any other, %{ has no special meaning outside the string you use the % operator on. 
puts formatted_string 

format_string % hash%就像任何其他操作,%{有使用字符串以外沒有任何特殊含義運算符%這樣刪除了運算符(%)和散列操作數的開放大括號({)之間的空格是有誤導性的。

相關問題