我無法理解什麼是下面的代碼片段是做紅寶石%運營商
"foo = %{foo}" % { :foo => 'bar' }
=> "foo = bar"
從
所以理解爲「foo =%{}富」是格式規範,但在這種情況下它似乎使用%{foo}?執行變量插值
我無法理解什麼是下面的代碼片段是做紅寶石%運營商
"foo = %{foo}" % { :foo => 'bar' }
=> "foo = bar"
從
所以理解爲「foo =%{}富」是格式規範,但在這種情況下它似乎使用%{foo}?執行變量插值
String#%
使用給定的字符串作爲格式規範,並應用參數(數組/散列)並返回結果字符串。
%{...}
是通過名稱格式的參考。還有%<...>
還需要哪些格式樣式(S,d,F,...)
"foo = %{key}" % { :key => 'bar' }
# => "foo = bar"
"foo = %<key>s" % { :key => 'bar' }
# => "foo = bar"
有關格式規範詳情見Kernel#sprintf
。
解釋是這樣的簡單的方法是看線,這是一個字符串(foo = %{foo}
)的第一部分,%符號從而意味着字符串的%方法(String#%),所以文字是實際上是格式規範的第一部分,字符串是如何呈現的。 %之後的部分必須是一個數組或哈希,在這種情況下,哈希將執行一個命名替換,這意味着key
是必須出現在哈希中的鍵的名稱,返回值bar
你可以用普通的替換來寫這個,但是你需要兩行代碼。
hash = { :key => 'bar' }
"foo = #{hash[:key]}"
或者只使用一個變量
foo = "bar"
"foo = #{foo}"
其中如果不出意外涉及的是更具可讀性。
希望示例代碼片段更好;左邊的foo讓我困惑了一段時間。如果可能,請嘗試將其更改爲其他內容,這可能會使片段更清晰。 – 2015-01-04 14:51:22