% W (सरणी) का क्या अर्थ है?


835

मैं FileUtils के लिए दस्तावेज देख रहा हूँ।

मैं निम्नलिखित पंक्ति से भ्रमित हूँ:

FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'

क्या %wमतलब है? क्या आप मुझे दस्तावेज की ओर इशारा कर सकते हैं?

जवाबों:


1243

%w(foo bar)के लिए एक शॉर्टकट है ["foo", "bar"]। इसका मतलब यह है कि यह अल्पविरामों के बजाय रिक्त स्थान के द्वारा अलग किए गए और उनके आसपास के उद्धरणों के बिना लिखने के लिए एक संकेतन है। आप zenspider के quickref में शाब्दिक लेखन के तरीकों की एक सूची पा सकते हैं ।


199
इसके अलावा, कोष्ठक लगभग किसी भी अन्य वर्ण जैसे कि वर्ग कोष्ठक% w [...] हो सकता है, घुंघराले%% w {...} या यहाँ तक कि विस्मयादिबोधक चिह्न% w जैसे कुछ भी हो सकता है ...! ...। इन सभी का व्यवहार समान है (एक सरणी लौटाते हुए)।
रैनब

143
सबसे आसान तरीका यह है कि "व्हाट्सएप (डब्ल्यू) अलग सरणी" का अर्थ है कि याद रखें।
जूलिक

7
"सामान्य डिलीश किए गए
Jared Beck

121
यदि स्ट्रिंग में रिक्त स्थान हैं, तो बस उन्हें \ _ से बचाएं। Ex .:%w(ab\ c def) # => ["ab c", "def"]
दिमित्री

6
लगता है कि इस पृष्ठ ने इस प्रश्न को भी हल कर दिया होगा: ruby-doc.org/core-2.0/doc/syntax/…
TheConstructor

471

मुझे लगता है %w()कि "शब्द सरणी" के रूप में - तत्वों को रिक्त स्थान द्वारा सीमांकित किया जाता है और यह स्ट्रिंग की एक सरणी देता है।

अन्य% शाब्दिक हैं:

  • %r() नियमित अभिव्यक्ति लिखने का एक और तरीका है।
  • %q() एकल-उद्धृत स्ट्रिंग लिखने का एक और तरीका है (और बहु-पंक्ति हो सकता है, जो उपयोगी है)
  • %Q() एक डबल-उद्धृत स्ट्रिंग देता है
  • %x() एक शेल कमांड है
  • %i() प्रतीकों की एक सरणी देता है (रूबी> = 2.0.0)
  • %s()fooएक प्रतीक में बदल जाता है ( :foo)

मैं किसी अन्य को नहीं जानता, लेकिन वहाँ कुछ गुप्त हो सकता है ...


32
रूबी 2.0.0 के रूप में आप %i()प्रतीकों की एक सरणी उत्पन्न करने के लिए भी उपयोग कर सकते हैं ।
डेविड टयूइट

10
वहाँ भी है %()(या %[]या %{}) जो एक डबल उद्धृत स्ट्रिंग देता है और डबल कोट्स पलायन, की तरह %Q()। जैसे%("sender name" <sender@example.com>) # => "\"sender name\" <sender@example.com>"
डेनिस

59

वहाँ भी है %sकि आप किसी भी प्रतीक बनाने के लिए अनुमति देता है, उदाहरण के लिए:

%s|some words|          #Same as :'some words'
%s[other words]         #Same as :'other words'
%s_last example_        #Same as :'last example'

रूबी 2.0.0 के बाद से आपके पास भी है:

%i( a b c )   # => [ :a, :b, :c ]
%i[ a b c ]   # => [ :a, :b, :c ]
%i_ a b c _   # => [ :a, :b, :c ]
# etc...


22

हालाँकि यह एक पुरानी पोस्ट है, प्रश्न सामने आते रहते हैं और उत्तर मुझे हमेशा स्पष्ट नहीं लगते हैं, इसलिए, यहाँ मेरे विचार हैं:

%wऔर %Wसामान्य डिलीट किए गए इनपुट प्रकारों के उदाहरण हैं , जो एरे से संबंधित हैं। वहाँ अन्य प्रकार है कि शामिल कर रहे हैं %q, %Q, %r, %xऔर %i

ऊपरी और निचले मामले के संस्करण के बीच का अंतर यह है कि यह हमें एकल और दोहरे उद्धरण चिह्नों की सुविधा प्रदान करता है। सिंगल कोट्स और (लोअरकेस) के साथ %w, हमारे पास कोई कोड इंटरपोलेशन ( #{someCode}) और एक सीमित श्रेणी के एस्केप वर्ण हैं जो काम करते हैं ( \\, \n)। दोहरे उद्धरण चिह्नों और (अपरकेस) के साथ %Wहम करते हैं इन सुविधाओं की पहुंच है।

उपयोग किए गए सीमांकक कोई भी चरित्र हो सकता है, न कि केवल खुले कोष्ठक। ऊपर दिए गए उदाहरणों के साथ खेलते हैं कि प्रभाव में देखें।

एक पूर्ण लेखन के लिए %wऔर पूरी सूची के साथ, अक्षर और सीमांकक से बचकर, " रूबी -% w बनाम% W - रहस्यों का पता चला! "


17

इसके बजाय %w()हमें उपयोग करना चाहिए%w[]

रूबी शैली गाइड के अनुसार:

जब आप शब्दों की एक सरणी (रिक्त स्थान के बिना रिक्त तार और उनमें विशेष वर्ण) की आवश्यकता हो, तो% w को शाब्दिक सरणी सिंटैक्स में प्राथमिकता दें। इस नियम को केवल दो या अधिक तत्वों वाले सरणियों पर लागू करें।

# bad
STATES = ['draft', 'open', 'closed']

# good
STATES = %w[draft open closed]

उन ब्रेसिज़ का उपयोग करें जो विभिन्न प्रकार के प्रतिशत के लिए सबसे उपयुक्त हैं।

[]सरणी के लिए शाब्दिक ( %w, %i, %W, %I) मानक सरणी के साथ संरेखित किया गया है।

# bad
%w(one two three)
%i(one two three)

# good
%w[one two three]
%i[one two three]

के लिए और अधिक पढ़ यहाँ


11

पर प्रतिशत स्ट्रिंग्स के लिए प्रलेखन से अंश Http://ruby-doc.org/core/doc/syntax/literals_rdoc.html#label-Percent+Strings :

% (...) के अलावा जो स्ट्रिंग बनाता है,% अन्य प्रकार की वस्तु बना सकता है। तार के साथ के रूप में, एक अपरकेस अक्षर प्रक्षेप की अनुमति देता है और वर्णों से बच जाता है जबकि एक निचला अक्षर उन्हें निष्क्रिय कर देता है।

ये रूबी में प्रतिशत स्ट्रिंग्स के प्रकार हैं:
...
% w : ऐरे ऑफ़ स्ट्रिंग्स


2
Geez धन्यवाद! मुझे लगता है कि यह अस्तित्व में नहीं था शुरू किया गया था। अन्य लोगों द्वारा प्रदान किए गए रूबाइडोक लिंक टूट गए हैं।
गेरी

इन दस्तावेज़ों को रबडॉक्स में काफी समय से शामिल नहीं किया गया था।
टीन मैन

2

मुझे उपयोगकर्ताओं के पूर्ण नामों के एक CSV स्प्रेडशीट से कॉलम का एक गुच्छा दिया गया था और मुझे रिक्त स्थान के साथ प्रारूपण रखने की आवश्यकता थी। माणिक्य का उपयोग करते समय मैंने उन्हें पाने का सबसे आसान तरीका बताया:

names = %( Porter Smith
Jimmy Jones
Ronald Jackson).split('\n')

यह हाइलाइट करता है %()जो एक स्ट्रिंग बनाता है जैसे "Porter Smith\nJimmyJones\nRonald Jackson"और आप splitपर स्ट्रिंग को प्राप्त करने के लिए"\n" ["Porter Smith", "Jimmy Jones", "Ronald Jackson"]

तो ओपी के मूल प्रश्न का उत्तर देने के लिए, वे लिख सकते थे %(cgi\ spaeinfilename.rb;complex.rb;date.rb).split(';')कि क्या हुआ spaceजब आप spaceअंतिम सरणी आउटपुट में मौजूद होना चाहते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.