इस डेटाबेस में & quot; <<, * का क्या मतलब है।


161

अब तक मैंने केवल डेटाबेस का उपयोग किया है। प्रत्येक पैरामीटर के साथ स्पष्ट रूप से कहा जाता है, नीचे फ़ाइल में यह कुछ वर्णों का उपयोग करता है जो मुझे समझ में नहीं आता है। प्रत्येक पंक्ति और प्रतीक (&, *, <<) का क्या अर्थ है, मैं इस फ़ाइल को कैसे पढ़ूं?

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  <<: *default
  database: test_test


cucumber:
  <<: *test

production:
  <<: *default
  database: test_production

6
Yml फ़ाइल में आपको अलग-अलग वातावरण में बार-बार डेटाबेस कनेक्शन के मापदंडों को फिर से लिखना नहीं पड़ता है यदि कनेक्शन params समान हैं। यहाँ उपर्युक्त मामले में, पर्यावरण ककड़ी परीक्षण वातावरण की तरह सटीक कनेक्शन पैरामेट्स का उपयोग करती है। और उत्पादन वातावरण डेटाबेस नाम को छोड़कर विकास में कनेक्शन परम का उपयोग करता है। यह DRY (अपने आप को दोहराना नहीं) कोड की तरह कुछ है। कृपया मुझे ठीक करने के लिए स्वतंत्र महसूस करें।
kxhitiz

2
यह भी देखें: yaml.org/type/merge.html
dreftymac

जवाबों:


191

&निशान नोड के लिए एक उपनाम (अपने उदाहरण में &defaultउपनाम के रूप में "डिफ़ॉल्ट" विकास नोड) और *संदर्भ नाम "डिफ़ॉल्ट" के साथ aliased नोड। <<:उस नोड की सामग्री के लिए डालते हैं।

मुझे यहां YAML युक्ति उद्धृत करने की अनुमति दें:

बार-बार नोड्स (ऑब्जेक्ट्स) को पहले एक एंकर (एम्परसेंड - "और" के साथ चिह्नित) द्वारा पहचाना जाता है, और फिर उसके बाद अलियास (तारांकन चिह्न के साथ संदर्भित - "*")।

तो आपके उदाहरण के कुछ हिस्सों

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  <<: *default
  database: test_test

वास्तव में विस्तार

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  adapter: postgresql       # from the "default" alias
  database: test_test       # overridden by the duplicate key

और उसी समय उपनाम "परीक्षण" के तहत "परीक्षण" नोड भी उपलब्ध कराएं।

YAML विनिर्देश पर एक नज़र डालें - 2.2 अधिक विवरण के लिए संरचनाएं (या यदि आपको मोर डॉक्स ++: 3.2.2.2 की आवश्यकता है। एंकर और उपनाम )


2
जिज्ञासु: "परीक्षण" का परीक्षण करने के लिए फैलता है: और परीक्षण एडाप्टर: "डिफ़ॉल्ट" उपनाम डेटाबेस से #grgrql #: "डिफ़ॉल्ट" उपनाम डेटाबेस से dev_development #: test_test पूरी तरह से सही होने के लिए। क्या दूसरा "डेटाबेस" "डिफ़ॉल्ट" से संदर्भित एक को ओवरराइड करता है?
ग्रिप्प ३०'१

2
@Gripp हाँ, डेटाबेस कुंजी <<: *defaultइसे ओवरराइट करने के बाद घोषित की गई । साथ YAML यह पैदा करता है{"development"=>{"adapter"=>"postgresql", "database"=>"dev_development"}, "test"=>{"adapter"=>"postgresql", "database"=>"test_test"}}
श्री ताओ

13

&default आप बाद में उपयोग के लिए कुछ नाम के साथ विशेषताओं के इस सेट को लेबल कर रहे हैं

<<: *default इसका मतलब है कि आप डिफ़ॉल्ट से लेबल किए गए समूह की सभी विशेषताओं को शामिल कर रहे हैं


9

ये नोड संदर्भ (*) और साहचर्य सरणी का आपस में विलय (<<) है कि एक नोड एक लंगर के साथ लेबल (&) टैग का उल्लेख प्रतिनिधित्व करते हैं - विकिपीडिया

इसे ऑनलाइन आज़माएं ।


3

वे एक ही सेटिंग को बार-बार दोहराने के बिना पर्यावरण को संदर्भित करने का एक तरीका है (इसे ऊपर खींचें)।

test: &test
  <<: *default

&test उन विशिष्ट सेटिंग्स का संदर्भ बनाता है।

<<: *default कहते हैं कि परीक्षण के लिए डिफ़ॉल्ट सेटिंग्स का उपयोग करें

cucumber:
  <<: *test

तो अब हम जानते हैं कि इसके लिए cucumberहम सेटिंग्स का उपयोग करना चाहते हैं test


2

सरल शब्दों में, यह धारणा आधार और व्युत्पन्न वर्ग के समान है।

बेस क्लास टेम्प्लेट में, आप 'और' के साथ सभी सामान्य विवरणों का उल्लेख करते हैं, जिसका अर्थ है कि इसका उपयोग उन अन्य yaml अनुभाग का विस्तार करने के लिए किया जा सकता है जिनकी इन क्षेत्रों को आवश्यकता है। अब जब आप एक और खंड बनाते हैं जो इस 'बेस क्लास' प्रकार की संरचना के कॉन्फिग मान का सुपरसेट है, तो आप बेस क्लास एंकर (यानी 'और' के साथ शुरू हुआ) के साथ '*' का उपयोग करते हैं। आप वास्तव में 'बेस क्लास' सेक्शन को रखने के लिए '<<:' का उपयोग यमल धारणा के रूप में करते हैं, जिसे आप बाद में ओवरराइड कर सकते हैं।

vsm:
  stub_nsx_mgr: &MGR_CTRL_STUB
    username: ADMIN
    password: $DEFAULT_PASSWORD
    deployment: ovf
    build: $PR_BUILD
    vmnics:
      - network: $MANAGEMENT_NETWORK_0
    vc: vc_0
    ovf_options:
      - --diskMode=$DISKMODE
      - --deploymentOption=$DEPLOYMENT_OPTION
$MGR_0:
    <<: *MGR_CTRL_STUB
    ovf_path_regex: 'appliance.*\.ovf'
    ovf_options:
      - --diskMode=$DISKMODE
      - --deploymentOption=$DEPLOYMENT_OPTION
$CTRL_0:
    <<: *MGR_CTRL_STUB
    ovf_options:
      - --diskMode=$DISKMODE
      - --allowExtraConfig
$CTRL_1:
    *MGR_CTRL_STUB

लेकिन, यदि आप विस्तारित क्षेत्रों को ओवरराइड नहीं करना चाहते हैं, तो आप '<<:' को छोड़ सकते हैं

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