कुछ YAML वस्तुओं दूसरों का उल्लेख करते हैं:
irb> require 'yaml'
#=> true
irb> str = "hello"
#=> "hello"
irb> hash = { :a => str, :b => str }
#=> {:a=>"hello", :b=>"hello"}
irb> puts YAML.dump(hash)
---
:a: hello
:b: hello
#=> nil
irb> puts YAML.dump([str,str])
---
- hello
- hello
#=> nil
irb> puts YAML.dump([hash,hash])
---
- &id001
:a: hello
:b: hello
- *id001
#=> nil
ध्यान दें कि यह हमेशा वस्तुओं का पुन: उपयोग नहीं करता है (स्ट्रिंग सिर्फ दोहराया है), लेकिन यह करता है कभी कभी (हैश एक बार परिभाषित और संदर्भ द्वारा पुन: उपयोग किया जाता है)।
YAML स्ट्रिंग प्रक्षेप का समर्थन नहीं करता है - जो है कि आप क्या करने की कोशिश कर लगता है - लेकिन वहाँ कोई कारण नहीं है कि आप इसे थोड़ा वरबोस रूप में दर्शा सांकेतिक शब्दों में बदलना नहीं कर सकता है:
intro: Hello, dear user
registration:
- "%s Thanks for registering!"
- intro
new_message:
- "%s You have a new message!"
- intro
तो फिर तुम यह कर सकते हैं अंतर्वेशन आप YAML लोड के बाद:
strings = YAML::load(yaml_str)
interpolated = {}
strings.each do |key,val|
if val.kind_of? Array
fmt, *args = *val
val = fmt % args.map { |arg| strings[arg] }
end
interpolated[key] = val
end
और यह निकलेगा interpolated
के लिए निम्नलिखित:
{
"intro"=>"Hello, dear user",
"registration"=>"Hello, dear user Thanks for registering!",
"new_message"=>"Hello, dear user You have a new message!"
}
दिलचस्प। दो प्रश्न: [1] तो डंप सिर्फ स्ट्रिंग नहीं लौटाता है, लेकिन निष्पादन वातावरण में चर के लिए दिखता है? [2] मुझे यकीन नहीं है कि मैं समझता हूं कि 'हैश' मामले में क्या हुआ। –
@ जॉन: [1] डंप चर पर गौर नहीं करता - लेकिन यह डब्ल्यू पारित कर दिया वस्तु में/पुनरावृत्ति के लिए दिखता है। [2] 'YAML.dump ([हैश, हैश]) में, 'इसमें तारों के प्रतीक के हैंश की एक सरणी थी। सरणी के निरीक्षण में, यह पाया गया कि दो हैंश एक ही वस्तु का जिक्र कर रहे थे। तो पहली बार यह हैश मुद्रित, यह है कि हैश के लिए एक पहचानकर्ता ('और id001'), और दूसरी बार दिया था, बजाय पूरी बात फिर से प्रिंट के लिए, यह है कि पहचानकर्ता संदर्भित (' * id001')। – rampion
मैं देखता हूं। तो यह वास्तव में yaml फ़ाइलों के भीतर वस्तुओं का पुन: उपयोग करने के लिए मेरी खोज में कहीं भी नहीं मिलता है, है ना? –