2012-12-09 13 views
7

के साथ मैं वाईएएमएल का उपयोग कर एक फाइल में रुबी हैश लिख रहा हूं।स्ट्रिंग्स के साथ परिवर्तित स्थान के साथ क्यों शुरू हो रहे हैं:! 'रूबी/वाईएएमएल

File.open(output_file, "w") {|file| file.puts YAML::dump(final)} 

हैश में तारों के रूप में तार और फ़्लोट्स मान के रूप में होते हैं।

जब मेरे तार केवल अक्षर होना वे फ़ाइल फ़ाइल में इस तरह के रूप outputted हैं:

abc: 1.0 
bcd: 1.0 
cde: 1.0 

एक स्ट्रिंग एक अंतरिक्ष यह इस तरह के रूप outputted है के साथ शुरू होता है:

! ' ab': 1.0 

जब मैंने पढ़ा है फ़ाइल फिर से सबकुछ ठीक है, लेकिन मैं जानना चाहता हूं कि यह क्यों हो रहा है और इसका क्या अर्थ है।

मैंने वाईएएमएल दस्तावेज की खोज की और कहा कि स्थानीय डेटाटाइप का प्रतिनिधित्व करने के लिए एक विस्मयादिबोधक बिंदु का उपयोग किया जाता है।

यह रिक्त स्थान से शुरू होने वाली स्ट्रिंग पर क्यों होता है?

उत्तर

5

! is known as the "non-specific tag"। यह YAML इंजन को निम्न आइटम को स्ट्रिंग, हैश या सरणी के रूप में डीकोड करने के लिए मजबूर करता है। यह मूल रूप से इसे एक अलग प्रकार के रूप में व्याख्या करने अक्षम करता है। मुझे यकीन नहीं है कि इंजन उन्हें इस तरह टैग क्यों कर रहा है; यह जरूरी प्रतीत नहीं होता है। शायद यह अस्पष्टता को दूर करने का प्रयास कर रहा है?

संपादित करें:

YAML.dump({' a'=>0}) 
=> "---\n! ' a': 0\n" 
YAML.load("---\n! ' a': 0\n") # with the bang 
=> {" a"=>0} 
YAML.load("---\n' a': 0\n") # without the bang 
=> {" a"=>0} 
+0

मैं सोच रहा हूँ यह स्ट्रिंग की जरूरत है पुष्टि करने के लिए अंतरिक्ष स्ट्रिंग का हिस्सा है उद्धरण के भीतर होना करने के लिए: किसी भी तरह, यह अनावश्यक वाक्य रचना है। मैंने इस स्पेस को और अधिक जांच लिया है और अनुभाग में पाया है: "उदाहरण 7.8। सिंगल कोटेड इम्प्लीट कीज" का उल्लेख है कि: "सभी अग्रणी और पिछली सफेद स्पेस वर्ण सामग्री से बाहर किए गए हैं।" मुझे यकीन नहीं है, लेकिन मुझे लगता है कि इसे इस्तेमाल करने की आवश्यकता हो सकती है! प्रमुख सफेद स्थान को हटाने से रोकने के लिए? – Gilles

+1

उद्धरण के पहले और बाद में संदर्भित अग्रणी और पिछला सफेद स्थान है। यह दिखाया जा सकता है कि '!' इसे संपादित करके अनियंत्रित किया गया है, और yaml को फिर से लोड किया जा रहा है, जो '! 'के बिना बिल्कुल वही लोड करता है। –

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