% w

2009-02-12 7 views
5

निम्नलिखित कोड उत्पादन में "xyz"% w

a = %w{x y z} 
print a.to_s 

वहाँ कि ब्लॉक करने के लिए जोड़ा जा सकता है रिक्त स्थान जोड़े जाने की अनुमति देने वाला विकल्प है पैदा करता है का उपयोग करते समय रिक्त स्थान सहित?

उदाहरण के लिए, मैंने सोचा था कि अंतरिक्ष को अलग करने के तत्वों "xyz" का उत्पादन का उत्पादन करने के

a = %w{"x " "y " "z "} 
print a.to_s 

इसके बजाय यह इस का उत्पादन है कि इस के लिए कोड को बदलने के द्वारा मैं सक्षम हो सकता है:

"x" "y" "z"

उत्तर

2
a = ["xyz"].split("").join(" ") 

या

a = ["x","y","z"].join(" ") 

या

a = %w(x y z).join(" ") 
+0

मुझे नहीं पता था कि आप इसे इस तरह से कर सकते हैं। धन्यवाद। –

+1

आपके पास समस्या यह थी कि 1.9 से पहले रुबी में array.to_s बस सभी तत्वों को अंत तक अंत में फंस गया। समस्या आपके सरणी डेटा में नहीं थी, लेकिन सरणी मुद्रित विधि। यही कारण है कि% w {x y z} .join ('') ठीक काम करता है। इसके अलावा,% w सरणी मानों में रिक्त स्थान शामिल करने के लिए, "\" (बैकस्लैश-स्पेस) का उपयोग करें। – Chuck

2

इसके लिए %w का उपयोग न करें - यह एक शॉर्टकट है जब आप शब्दों से किसी सरणी को विभाजित करना चाहते हैं। अन्यथा, मानक सरणी संकेतन का उपयोग:

a = ["x ", "y ", "z "] 
5

आप बैकस्लैश-बचने के लिए उन्हें (फिर एक विभाजक के रूप में एक अतिरिक्त स्थान जोड़ने) द्वारा रिक्त स्थान शामिल कर सकते हैं।

a = %w{x\ y\ z\ } 

हालांकि यह पढ़ना मुश्किल हो सकता है। यदि आप वहां स्पष्ट उद्धरण चिह्न डालना चाहते हैं, तो आपको %w{} की आवश्यकता नहीं है, बस [] के साथ सामान्य कॉमा-डिलीमिटेड सरणी का उपयोग करें।

+0

कमाल। धन्यवाद। –

0
def explain 
    puts "double quote equivalents" 
    p "a b c", %Q{a b c}, %Q(a b c), %(a b c), %<a b c>, %!a b c! # & etc 
    puts 

    puts "single quote equivalents" 
    p 'a b c', %q{a b c}, %q(a b c), %q<a b c>, %q!a b c! # & etc. 
    puts 

    puts "single-quote whitespace split equivalents" 
    p %w{a b c}, 'a b c'.split, 'a b c'.split(" ") 
    puts 

    puts "double-quote whitespace split equivalents" 
    p %W{a b c}, "a b c".split, "a b c".split(" ") 
    puts 
end 

explain 

def extra_credit 
    puts "Extra Credit" 
    puts 

    test_class = Class.new do 
    def inspect() 'inspect was called' end 
    def to_s() 'to_s was called' end 
    end 

    puts "print" 
    print test_class.new 
    puts "(print calls to_s and doesn't add a newline)" 
    puts 

    puts "puts" 
    puts test_class.new 
    puts "(puts calls to_s and adds a newline)" 
    puts 

    puts "p" 
    p test_class.new 
    puts "(p calls inspect and adds a newline)" 
    puts 
end 

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