2010-11-27 9 views
101

मैं अक्सर Gemfile में निम्नलिखित नोटेशन (~>) देखता हूं।Gemfile में rubygem निर्दिष्ट करते समय ~> और> = के बीच क्या अंतर है?

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

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

+6

यह भी देखें: [संस्करण आवश्यकता में '~>' का अर्थ] (http://StackOverflow.Com/q/3414337/#3416289)। –

+20

'~> 'कभी-कभी" शुक्राणु ऑपरेटर "कहा जाता है। –

+2

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

उत्तर

141

यह pessimistic version constraint है। RubyGems प्रदान किए गए संस्करण में अंतिम अंक बढ़ाएगा और इसका उपयोग तब तक करेगा जब तक कि यह अधिकतम संस्करण तक नहीं पहुंच जाता। सोचने के लिए के बारे में यह है कि आप पिछले अंक कुछ मनमाना मूल्य के लिए बढ़ाने के साथ ठीक हैं

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

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

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

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

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

, ये हैं:

+0

यह रत्नों के साथ कैसे व्यवहार करता है जो उनके संस्करण के लिए चार अंकों का उपयोग करते हैं जैसे [रीढ़ की हड्डी ऑन-रेल] (https://github.com/meleyal/backbone-on-rails)? – JJD

+2

@ जेजेडी: यह मूल रूप से वही व्यवहार होना चाहिए। चार के अंतिम अंक को बाध्य किए बिना बढ़ाया जा सकता है, लेकिन तीसरा नहीं होगा (इसलिए ~ ~> 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 को बढ़ाया नहीं जा सकता है)। – eldarerathis

+2

नियम के लिए अपवाद है कि "रूबीजम्स संस्करण में अंतिम अंक बढ़ाएगा" हालांकि: जब आप एक अंक प्रदान करते हैं। आप "~> 4" का अर्थ "कोई भी संस्करण 4 या उच्चतर" होने का अनुमान लगा सकते हैं, लेकिन [यह नहीं है] (http://stackoverflow.com/questions/24121960/why-does-the-gemfile-semantic-versioning- ऑपरेटर-उपज-असंगत-resu), तो सावधान रहें। – hlascelles

2

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

  1. Tutorial that teaches you how to make your own RubyGem, the standard practices associated with it, and how to upload it so that others can install it.
  2. How to create a Gem from scratch with Bundler
+0

पहला लिंक 404 है –

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