2012-06-05 8 views
5

कहें कि मैं ["one", "two", nil] के साथ एक सरणी बनाना चाहता हूं, क्या यह शॉर्टेंड %w[] वाक्यविन्यास का उपयोग करके ऐसा करना संभव है? जाहिर है यह काम नहीं करता:क्या% w [] shorthand का उपयोग कर सरणी में एक शून्य मान बनाना संभव है?

array = %w[one two nil] 
=> ["one", "two", "nil"] 
array[2].nil? 
=> false 

रूबी 1.9.3

+0

यह भी देखें http://stackoverflow.com/questions/12979928/create-array-with-empty-string-using-w (परिणाम में एक खाली स्ट्रिंग होती है - इसलिए यह एक समान स्थिति है, वही नहीं) । एक और समान प्रश्न: http://stackoverflow.com/questions/4064062/space-in-the-ruby-array-by-w – knut

उत्तर

4

नं कि सुविधा वाक्य रचना का पूरा उद्देश्य स्ट्रिंग शाब्दिक के आसपास उद्धरण डाल से बचने के लिए है, और विभाजक अल्पविराम।

+0

आपका उत्तर% w [] कन्स्ट्रक्टर की * भावना * को दर्शाता है, लेकिन एक और क्षमाशील पढ़ा जाता है प्रश्न का हो सकता है "क्या% w [] कन्स्ट्रक्टर का उपयोग करते समय शून्य मान बनाना संभव है?" उस स्थिति में, जवाब स्पष्ट रूप से हां है। –

+0

@CodeGnome वास्तव में, सवाल स्पष्ट रूप से '% w []' कन्स्ट्रक्टर _using_ बताता है। –

+0

@dunsmoreb समर्थन के लिए धन्यवाद। – Anil

0

केवल अप्रत्यक्ष रूप से। आप अपने सरणी बना सकते हैं, और फिर सरणी # के साथ एक वास्तविक नहीं के बराबर करने के लिए स्ट्रिंग "शून्य" कन्वर्ट इकट्ठा:

array = %w[one two nil].collect { |v| v == 'nil' ? nil : v } 
1

आप %w[] सरणी splat और डाल सकता है nil के बाद:

>> array = [ *%w[one two], nil, *%w[and some more words] ] 
=> ["one", "two", nil, "and", "some", "more", "words"] 

लेकिन यह अलग-अलग तारों को उद्धृत करने की तुलना में शोर हो सकता है; ओटीओएच, अतिरिक्त शोर इंगित करता है कि कुछ अजीब चल रहा है ताकि पाठकों को करीब देखने के लिए प्रोत्साहित किया जा सके।

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