2013-11-26 12 views
5

मैं "रेल 3 वे" पढ़ रहा हूं और पेज 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 एक स्ट्रिंग है। रुबी में आप वास्तव में निश्चित रूप से तब तक नहीं जानते जब तक कि आप ध्यान से कोड को पढ़ नहीं लेते। यह असंभव है, लेकिन यह % हो सकता है जिसका अर्थ मॉड्यूलो है।

आप जिस चीज के बारे में सुनिश्चित हो सकते हैं वह पर path पर कॉलिंग विधि है।

+0

डाउनवॉटेड क्योंकि आपने यह नहीं बताया कि 'पैराम्स' हैश है, जो आमतौर पर – Phlip

+0

@Phlip है, मैंने इसके बारे में एक नोट जोड़ा है। धन्यवाद। – tadman

2

यह स्ट्रिंग इंटरपोलेशन करता है। सामान्य स्थिति में, यह बराबर है करने के लिए:

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

लेकिन, आप और अधिक जटिल स्वरूप विनिर्देशक सरणी या हैश से अंतर्वेशन का उपयोग कर सकते इस तरह के रेल पैरामीटर हैश के रूप में भी वस्तुओं,। मान्य प्रारूप विनिर्देश बनाने के तरीके के विवरण के लिए String#% और Kernel#sprintf विधियां देखें।

+0

विशेष रूप से, मान द्वारा एक हैश का विस्तार करने के लिए 'foo =% {foo} "% {: foo =>' bar '}' नोटेशन'% {foo} 'का उपयोग करता है। ध्यान दें कि कुछ अन्य भाषाओं ने '% (foo) s' का उपयोग किया होगा ... – Phlip

+0

@Phlip प्रारूप विनिर्देशक में हैश कुंजी का उपयोग करके इंटरपोलेशन करने का एक शानदार उदाहरण है। एक रचनात्मक टिप्पणी जोड़ने के लिए धन्यवाद! –

संबंधित मुद्दे