2013-05-24 23 views
5

की किसी सरणी interpolating जब मैं तार की एक सरणी को जोड़, यह उद्धरण '\ "', मैं कैसे उद्धरण बिना यह अंतर्वेशन हैं?रूबी, स्ट्रिंग्स

string_array = ["a","b","c"] 
p "#{string_array}"  # => "[\"a\", \"b\", \"c\"]" 
+1

उपयोग 'to_s' बजाय? "संस उद्धरण" क्या है? – squiguy

+1

@squiguy: स्ट्रिंग इंटरपोलेशन केवल सरणी पर 'to_s' को कॉल करता है, इसलिए उसका एक ही परिणाम होगा। उद्धरण के बिना "सांस उद्धरण" का अर्थ है। – messick

+0

अपने मामले में गड़बड़ी में, बैकस्लाश का कारण है, क्योंकि वह स्ट्रिंग पर निरीक्षण कहलाता है, स्ट्रिंग_एरे नहीं। एक स्ट्रिंग और सरणी के लिए .inspect विधि अलग हैं। (मुझे लगता है) – Senjai

उत्तर

3

p "#{string_array}" का उपयोग कर puts "#{string_array}".inspect

REME रूप में ही है mber क्योंकि पी वस्तु एक ही रूप में object.inspect डालता

जो के रूप में (आपके मामले में, आप एक स्ट्रिंग पर पी कहा जाता है) एक ही है:

puts string_array.to_s.inspect 

(to_s हमेशा कहा जाता है कि जब भी एक सरणी है कुछ स्ट्रिंग बनने के लिए कहा जाता है (मुद्रित और क्या नहीं।)

तो आप वास्तव में सरणी द्वारा लौटाई गई स्ट्रिंग का निरीक्षण कर रहे हैं, सरणी नहीं।

अगर तुम सिर्फ [, "एक", "बी" "सी"] तरीका है कि ऐसा करने के लिए मुद्रित करने के लिए चाहता था p string_array नहीं p "#{string_array}"

उपयोग करने के लिए यदि आप सरणी में सभी स्ट्रिंग्स एक साथ शामिल करना चाहते हैं होगा , आप ऐसा करने के लिए स्ट्रिंग # शामिल होने का उपयोग करेंगे। जैसे अगर मैं एक अल्पविराम और प्रत्येक मान के बीच में एक जगह रखना चाहते थे, Messick की तरह, मैं का प्रयोग करेंगे:

puts string_array.join(", ") 

यह होगा उत्पादन: "एक, ख, ग"

+0

डीओएच! उस विस्तृत प्रतिक्रिया के लिए धन्यवाद। पूरी तरह से पी कॉल निरीक्षण भूल गए। चियर्स! – user1297102

+0

एनपी! खुशी है कि मैं मदद कर सकता हूं, अगर आप संतुष्ट हैं तो जवाब स्वीकार करना याद रखें! – Senjai

2

आप join की जरूरत के लिए भागने अक्षर शामिल सरणी तत्वों।

["a","b","c"].join(', ')