Gemfile में माणिक्य को निर्दिष्ट करते समय ~> और> = के बीच क्या अंतर है?


120

मैं अक्सर Gemfile में निम्नलिखित संकेतन (~>) देखता हूं।

gem "cucumber", "~>0.8.5"
gem "rspec", "~>1.3.0"

मुझे पता है कि संकेत (> =) सिर्फ अधिक या बराबर है, लेकिन क्या (~>) संकेतन का मतलब है? क्या वे दोनों समान हैं या कोई महत्वपूर्ण अंतर है?



28
~>कभी-कभी "शुक्राणु संचालक" कहा जाता है।
एंड्रयू ग्रिम

3
क्या आप अपने जेमफाइल में रूबी संस्करण के लिए एक सीमा निर्दिष्ट कर सकते हैं? जैसेruby "~>2.0"
डेनिस


@ डेनिस यहाँ आपके प्रश्न का उत्तर है: stackoverflow.com/a/23116552/6359753
हेनरी यांग

जवाबों:


165

यह एक निराशावादी संस्करण की कमी है । RubyGems प्रदान किए गए संस्करण में अंतिम अंक में वृद्धि करेगा और इसका उपयोग तब तक करेगा जब तक कि यह अधिकतम संस्करण तक न पहुंच जाए। इसलिए ~>0.8.5शब्दार्थ इसके बराबर है:

gem "cucumber", ">=0.8.5", "<0.9.0"

इसके बारे में सोचने का आसान तरीका यह है कि आप अंतिम अंक में कुछ मनमाने मूल्य में वृद्धि के साथ ठीक हैं, लेकिन इसे स्ट्रिंग में देने से पहले जो आप प्रदान करते हैं उससे अधिक नहीं हो सकता है। इस प्रकार ~>0.8.5, किसी भी मूल्य तीसरे अंक (5) के लिए स्वीकार्य है बशर्ते कि यह 5 से अधिक या उसके बराबर हो, लेकिन अग्रणी 0.8 "0.8" होना चाहिए।

आप ऐसा कर सकते हैं, उदाहरण के लिए, अगर आपको लगता है कि 0.9 संस्करण कुछ ब्रेकिंग बदलावों को लागू करने जा रहा है, लेकिन आप जानते हैं कि पूरी 0.8.x रिलीज श्रृंखला सिर्फ बगफिक्स है।

हालाँकि, बस का उपयोग ">=0.8.5"यह दर्शाता है कि 0.8.5 की तुलना में (या बराबर) बाद में कोई भी संस्करण स्वीकार्य है। कोई ऊपरी सीमा नहीं है।


यह उन रत्नों के साथ कैसे व्यवहार करता है जो अपने संस्करण के लिए चार अंकों का उपयोग करते हैं जैसे रीढ़-पर-रेल ?
JJD

2
@JJD: यह मूल रूप से समान व्यवहार होना चाहिए। चार के अंतिम अंक को बाध्य किए बिना ~>0.9.2.3बढ़ाया जा सकता है, लेकिन तीसरा नहीं होगा (इसलिए v0.9.2.4 या v0.9.2.23 के लिए अनुमति देगा लेकिन v0.9.3.0 नहीं)। यदि आपने बाधा में केवल 3 अंक निर्दिष्ट किए हैं, तो चौथा अनिवार्य रूप से अप्रासंगिक होगा - यह केवल पहले तीन के आधार पर विवश होगा जो आप निर्दिष्ट करते हैं (जैसे ~>0.9.2कि 0.9.xy श्रृंखला के भीतर कुछ भी स्वीकार करेंगे, चाहे जो yभी हो; बाधा है; कि 9 वेतन वृद्धि नहीं की जा सकती)।
एल्डररैथिस

3
नियम का एक अपवाद है कि "RubyGems संस्करण में अंतिम अंक बढ़ाएगा" हालांकि: जब आप एक अंक की आपूर्ति करते हैं। आप "~> 4" से अपेक्षा कर सकते हैं कि "कोई भी संस्करण 4 या उच्चतर" हो, लेकिन यह नहीं है , इसलिए सावधान रहें।
hlascelles

2
क्या के बारे में ~> 0.1 बनाम ~> 0.1.0? अगर हम इसके बारे में सोचते हैं कि "आप कुछ मनमाने मूल्य के अंतिम वेतन वृद्धि के साथ ठीक हैं", ~> 0.1 का अनुवाद> = 0.1.0 <1.0.0 है, जबकि ~> 0.1.0 का अनुवाद> = 0.1.0 < 0.2.0। क्या वो सही है?
वी

जब मैं एक GitHub परियोजना को यह कहते हुए देखता हूं कि उसे माणिक> = 2.4.4 की आवश्यकता है, तो क्या मैं मान सकता हूं कि वे 2.4.1 के बाद 2.5.1 और यहां तक ​​कि रूबी 3 सहित सभी रूबी का समर्थन करते हैं? या हमें सुरक्षित खेलना चाहिए (यानी सोचने के बजाय वे 2.4.4 समावेशी होने के बाद सभी रूबी का समर्थन करेंगे, मुझे यह सोचना चाहिए कि वे 2.4.4 से पहले किसी भी माणिक का समर्थन नहीं करेंगे)?
हेनरी यांग

3

@millisami आप भी इस तरह निराशावादी बाधा का उपयोग कर रत्न के साथ निर्भरता जोड़ने के लिए उपयोग कर सकते हैं:

gem.add_runtime_dependency "thor", "~> 0.18.1"

यदि आप मणि विकास के बारे में ज्यादा नहीं जानते हैं या बस इसमें शामिल हो रहे हैं, तो ये कुछ अच्छे संदर्भ हैं:

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

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