我在閱讀「Rails 3 Way」和第39頁,它顯示了匹配:to =>
重定向方法的代碼示例。在該方法中存在以下代碼。雖然我知道模數與數字有什麼關係,但我不確定下面的%做什麼,因爲路徑和參數顯然不是數字。如果有人能夠幫助我理解在這種情況下使用%,我會很感激。在下面的代碼中,%做了什麼?
proc { |params| path % params }
我在閱讀「Rails 3 Way」和第39頁,它顯示了匹配:to =>
重定向方法的代碼示例。在該方法中存在以下代碼。雖然我知道模數與數字有什麼關係,但我不確定下面的%做什麼,因爲路徑和參數顯然不是數字。如果有人能夠幫助我理解在這種情況下使用%,我會很感激。在下面的代碼中,%做了什麼?
proc { |params| path % params }
這可能是String#%
方法,它的工作原理很像sprintf
支持其他語言:
'%05d' % 10
# => "00010"
它可以在一個單一的參數或數組:
'%.3f %s' % [ 10.341412, 'samples' ]
# => "10.341 samples"
更新:正如菲利普指出的那樣,這種方法也需要一個哈希:
'%{count} %{label}' % { count: 20, label: 'samples' }
# => "20 samples"
當然,這是假設path
是一個字符串。在Ruby中,除非您仔細閱讀代碼,否則您絕對不會知道。這不太可能,但它可能是%
意思是模數。
你可以確定的是它的調用方法%
path
。
它執行字符串插值。在最簡單的情況下,它等同於:
"foo %s baz" % 'bar'
#=> "foo bar baz"
但是,可以使用更復雜的格式說明從數組或哈希插值對象了,如Rails的PARAMS哈希值。有關如何構建有效格式規範的詳細信息,請參閱String#%和Kernel#sprintf方法。
具體來說,''foo =%{foo}「%{:foo =>'bar'}'表示法使用'%{foo}'來擴展散列值。請注意,某些其他語言會在那裏使用'%(foo)s' ... – Phlip
@Phlip這是如何在格式說明符中使用散列鍵進行插值的一個很好的示例。感謝您添加建設性的評論! –
downvoted因爲你沒有解決'params'是一個散列時發生了什麼,它通常是 – Phlip
@Phlip我已經添加了一個關於這個的註釋。謝謝。 – tadman