एकाधिक लाइन स्ट्रिंग स्वरूपण - रूबी

रुबी में एक मल्टीलाइन स्ट्रिंग को प्रारूपित करने का प्रयास कर रहा है

heredoc तथा %q{ } इस मुद्दे में वे कोड स्वरूपण के लिए उपयोग किए जाने वाले व्हाइटस्पेस को शामिल करते हैं।

s = %q{Foo
Bar
Baz}
puts s

गलत तरीके से आउटपुट करता है:

Foo
Bar
Baz

निम्नलिखित काम करता है, लेकिन थोड़ा सा बदसूरत है वर्ण।

s = "Foon" 
"  Barn" 
"  Baz"
puts s

पाइथन में निम्नलिखित कार्य करता है:

s = ("Foon"
"  Barn"
"  Baz")
print s

रूबी में बराबर है?

उत्तर:

जवाब के लिए 2 № 1

एक चाल मैंने चुरा लिया रूबी वे:

class String
def heredoc(prefix="|")
gsub /^s*#{Regexp.quote(prefix)}/m, ""
end
end

s = <<-END.heredoc
|Foo
|  Bar
|  Baz
END

जवाब के लिए 3 № 2

मुझे लगता है कि इरादे से अधिक खतरे से अधिक निर्माण

s = %w{ Foo
Bar
Baz}

puts s

=>
Foo
Bar
Baz

और यदि आप पहली पंक्ति के इंडेंटेशन को रखना चाहते हैं, तो यह निश्चित रूप से डिज़ाइन द्वारा निर्मित होता है

s   = <<-END
Foo
Bar
Baz
END
puts s

=>
Foo
Bar
Baz

जवाब के लिए 2 № 3

आप हमेशा ऐसा कुछ कर सकते हैं:

s = ["Foo",
"  Bar",
"  Baz"].join("n")
puts s
=>
Foo
Bar
Baz

इस तरह, आपके पास तारों की शुरुआत और अंत की स्पष्ट रूप से सीमा निर्धारित करने के लिए उद्धरण चिह्न हैं, और इंडेंटेशन व्हाइटस्पेस तारों के साथ मिश्रित नहीं होता है।


संबंधित सवाल
सबसे लोकप्रिय