संस्करण आवश्यकता में टिल्ड-बिग-थेन (~>) का मतलब?


92

~>मणि चश्मा में संस्करण की आवश्यकता का अर्थ क्या है ?

hanna-0.1.12 [haml (~> 2.2.8)] पर निर्भर करता है

27
इसे कभी-कभी एक स्पर्मी ऑपरेटर कहा जाता है।
एंड्रयू ग्रिम


3
+1 @SuckerForMayhem, "twiddle-wakka" मजेदार है। नई लिंक: guides.rubygems.org/patterns/#pessimistic-version-constraint - जो अपने आप के लिए लिंक robots.thoughtbot.com/rubys-pessimistic-operator
लाल मटर

2
@SuckerForMayhem ट्वेल्ड-वक्का चूपकबरा की तरह कुछ महान जानवर की तरह लगता है। इस विषय में मेरा योगदान रहा है। समाज में आपका स्वागत है।
ट्विज

1
अद्यतन लिंक के लिए thx @TheRedPea
SuckerForMayhem

जवाबों:


93

RubyGems मैनुअल इसे एक निराशावादी संस्करण बाधा कहता है ।

मान लें कि आपने n-part संस्करण संख्या निर्दिष्ट की है, जैसे 1.3(2-भाग) या 3.5.6.2(4-भाग) बाधा के रूप में। फिर, बाधा को पूरा करने के लिए, एक संस्करण संख्या को निम्नलिखित दोनों स्थितियों को पूरा करना होगा

  1. संस्करण संख्या का पहला n-1 भाग बाधा के पहले n-1 भागों के समान होना चाहिए (जैसे 1.xया 3.5.6.xमिलान, लेकिन 0.xया 3.5.7.xनहीं) और

  2. संस्करण संख्या का अंतिम भाग बाधा के अंतिम भाग से अधिक या उसके बराबर होना चाहिए (जैसे 1.9999और 3.5.6.2मिलान, लेकिन 1.2या 3.5.6.1नहीं)।

दूसरे शब्दों में

~> x 1 .x 2 .x 3 । … .X n-2 .x n-1 .x n

माचिस

x 1 .x 2 .x 3 । ... .x n-2 .x n-1 .y, वाई> = एक्स n

इसका कारण "निराशावादी" बाधा कहा जाता है, और इसके लिए उपयोग का मामला भी है, जब आप बस कहते हैं > x.y.z, आप आशावादी हो रहे हैं: आप मानते हैं कि यहाँ से बाहर, जब तक सभी अनंत काल तक, एपीआई कभी नहीं बदलेगा। यह निश्चित रूप से एक बहुत बोल्ड धारणा है। हालाँकि, अधिकांश प्रोजेक्ट्स में नियम होते हैं कि जब उन्हें बैकवर्ड कम्पेटिबिलिटी को तोड़ने की अनुमति दी जाती है , और जब वे ब्रेक बैक कम्पैटिबिलिटी करते हैं तो उन्हें अपना वर्जन नंबर कैसे बदलना होगा । आप एक निराशावादी बाधा का उपयोग करते हुए उन संस्करण संख्या नियमों को एन्कोड कर सकते हैं, और इस तरह आप यह सुनिश्चित कर सकते हैं कि आपका कोड हमेशा काम करना जारी रखेगा (यह मानते हुए कि अन्य परियोजना के लेखक वास्तव में अपने स्वयं के नियमों का पालन करते हैं, जो दुर्भाग्य से हमेशा मामला होता है )।


32
दूसरे शब्दों में: ~> इसका अर्थ है कि यह केवल उस विशिष्ट संस्करण और अंतिम उप-संस्करण में नए उप-संस्करणों की अनुमति देगा।
मैग्ने

18

दूसरे शब्दों में, आप इस प्रतीक का उपयोग अपने मणि को सभी छोटे अपडेट के साथ अपडेट रखने के लिए कर सकते हैं और एक बड़ा अपडेट करने से बच सकते हैं जो आपके ऐप को तोड़ सकता है।

उदाहरण के लिए "~> 1.2" आपके मणि को 1.3 तक अपडेट करेगा (यदि ऐसा कोई संस्करण जारी किया गया है), लेकिन यह इसे 2.0 में अपडेट नहीं करेगा


13

मुझे लगता है कि बंडल डॉक्स ने इसे सबसे अच्छा योग दिया:

विनिर्देशन ~> का एक विशेष अर्थ है, उदाहरण के लिए सबसे अच्छा दिखाया गया है। ~> 2.0.3> = 2.0.3 और <2.1 के समान है। ~> 2.1> = 2.1 और <3.0 के समान है। ~> 2.2.beta 2.2.beta.12 की तरह प्रीलेरेज़ संस्करणों से मेल खाएगी।


1
मुझे डर है कि मैं नहीं। मुझे खुशी है कि स्वीकृत उत्तर इसे और विस्तार से बताता है। यह उदाहरण-आधारित स्पष्टीकरण वास्तव में मुझे समझने में मदद नहीं करता है कि ऑपरेटर का क्या मतलब है।
त्रिवेणी

-1

यह किसी भी ऐसे संस्करण से मेल खाता है जिसमें एक ही प्रमुख / मामूली हिस्सा है। इस मामले में इसका मतलब है कि haml ~> 2.2.8 किसी भी 2.2.x संस्करण से मेल खाएगा।

इसका उपयोग यह सुनिश्चित करने के लिए किया जा सकता है कि नए रत्न में एपीआई ब्रेकिंग परिवर्तन, उस नए लेकिन बदले हुए रत्न के आधार पर परिणाम नहीं देता है जो इस मामले में हन्ना को तोड़ देगा।


7
यह गलत नहीं है, लेकिन यह अधूरा है। यह बीच का अंतर समझता के लिए महत्वपूर्ण है ~> 2.0और ~> 2.0.0पूर्व मैचों 2.0, 2.1, 2.2.7, और अप करने के लिए सब कुछ (लेकिन सहित नहीं) 3.0 -। बाद के मैच 2.0, 2.0.1, 2.0.999 और बाकी सब कुछ (लेकिन शामिल नहीं) 2.1 तक मेल खाते हैं।
जेम्स ए। रोसेन

5
@James ए रोजेन: इसके अलावा, ~> 2.2.8होगा नहीं जवाब दावों के रूप में "किसी भी 2.2.x" संस्करण से मेल है, लेकिन एक्स ≥ 8. IOW के साथ ही 2.2.x संस्करण: इस सवाल का जवाब भी अधिक अधूरा सबसे अच्छे रूप में है, गलत और निश्चित रूप से की सीमा पर भ्रामक।
जॉर्ग डब्ल्यू मित्तग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.