2013-11-26 46 views
5

我在閱讀「Rails 3 Way」和第39頁,它顯示了匹配:to =>重定向方法的代碼示例。在該方法中存在以下代碼。雖然我知道模數與數字有什麼關係,但我不確定下面的%做什麼,因爲路徑和參數顯然不是數字。如果有人能夠幫助我理解在這種情況下使用%,我會很感激。在下面的代碼中,%做了什麼?

proc { |params| path % params } 

回答

10

這可能是String#%方法,它的工作原理很像sprintf支持其他語言:

'%05d' % 10 
# => "00010" 

它可以在一個單一的參數或數組:

'%.3f %s' % [ 10.341412, 'samples' ] 
# => "10.341 samples" 

更新:正如菲利普指出的那樣,這種方法也需要一個哈希:

'%{count} %{label}' % { count: 20, label: 'samples' } 
# => "20 samples" 

當然,這是假設path是一個字符串。在Ruby中,除非您仔細閱讀代碼,否則您絕對不會知道。這不太可能,但它可能是%意思是模數。

你可以確定的是它的調用方法%path

+0

downvoted因爲你沒有解決'params'是一個散列時發生了什麼,它通常是 – Phlip

+0

@Phlip我已經添加了一個關於這個的註釋。謝謝。 – tadman

2

它執行字符串插值。在最簡單的情況下,它等同於:

"foo %s baz" % 'bar' 
#=> "foo bar baz" 

但是,可以使用更復雜的格式說明從數組或哈希插值對象了,如Rails的PARAMS哈希值。有關如何構建有效格式規範的詳細信息,請參閱String#%Kernel#sprintf方法。

+0

具體來說,''foo =%{foo}「%{:foo =>'bar'}'表示法使用'%{foo}'來擴展散列值。請注意,某些其他語言會在那裏使用'%(foo)s' ... – Phlip

+0

@Phlip這是如何在格式說明符中使用散列鍵進行插值的一個很好的示例。感謝您添加建設性的評論! –