2011-12-13 14 views
6

मैं एक गुण सरणी के रूप में निम्नानुसार है (स्ट्रिंग gsub # के साथ बनाया गया),गणक वस्तु क्या है?

attributes = ["test, 2011", "photo", "198.1 x 198.1 cm", "Photo: Manu PK Full Screen"] 

जब मैं ऐसा करते हैं,

artist = attributes[-1].gsub("Photo:") 
p artist 

मैं मिल टर्मिनल

#<Enumerator: "Photo: Manu PK Full Screen":gsub("Photo:")> 

में निम्नलिखित उत्पादन आश्चर्य है कि मुझे आउटपुट के रूप में एक गणक वस्तु क्यों मिल रही है? अग्रिम में धन्यवाद।

संपादित करें: कृपया ध्यान दें कि attributes[-1].gsub("Photo:", ""), I am doing attributes[-1].gsub("Photo:") के बजाय तो पता करने के लिए क्यों प्रगणक वस्तु यहाँ वापस आ गया है चाहते हैं (मैं एक त्रुटि संदेश उम्मीद कर रहा था) और क्या चल रहा है।?

रूबी - 1.9.2

रेल - 3.0.7

उत्तर

16

एक Enumerator वस्तु enumerations के लिए आम कुछ तरीकों प्रदान करता है - next, each, each_with_index, rewind, आदि

आप Enumerator वस्तु यहां हो रही है क्योंकि gsub अत्यंत लचीला है:

gsub(pattern, replacement) → new_str 
gsub(pattern, hash) → new_str 
gsub(pattern) {|match| block } → new_str 
gsub(pattern) → enumerator 

पहले तीन मामलों में, प्रतिस्थापन तुरंत हो सकता है, और एक नई स्ट्रिंग वापस कर सकते हैं।

irb(main):022:0> s="one two three four one" 
=> "one two three four one" 
irb(main):023:0> enum = s.gsub("one") 
=> #<Enumerable::Enumerator:0x7f39a4754ab0> 
irb(main):024:0> enum.each_with_index {|e, i| puts "#{i}: #{e}"} 
0: one 
1: one 
=> " two three four " 
irb(main):025:0> 
: लेकिन, यदि आप एक प्रतिस्थापन स्ट्रिंग, एक स्थानापन्न के हैश, या प्रतिस्थापन के लिए एक ब्लॉक देना नहीं है, तो आप वापस आप बाद में साथ काम करने के तार का मिलान किया टुकड़े करने के लिए प्राप्त करने देता है कि Enumerator वस्तु मिल
5

जब न तो एक ब्लॉक है और न ही एक दूसरा तर्क आपूर्ति की जाती है, gsub एक प्रगणक देता है। अधिक जानकारी के लिए here देखें।

इसे हटाने के लिए, आपको एक दूसरा पैरामीटर चाहिए।

attributes[-1].gsub("Photo:", "") 

या

attributes[-1].delete("Photo:") 

आशा इस मदद करता है !!

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

  • कोई संबंधित समस्या नहीं^_^