2010-11-27 8 views
101

私はしばしばGemfileで次の表記(〜>)を参照します。Gemfileでrubygemを指定すると〜>と> =の違いは何ですか?

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

私は記号(> =)がちょうどそれ以上であることを知っていますが、(〜>)表記はどういう意味ですか? どちらも同じですか、それとも大きな違いがありますか?

+6

参照:[バージョン要件の '〜>'の意味](http://StackOverflow.Com/q/3414337/#3416289)。 –

+20

'〜>'は「精子オペレーター」と呼ばれることがあります。 –

+2

GemfileのRubyバージョンの範囲を指定できますか?例えば。 – Dennis

答えて

141

これはpessimistic version constraintです。 RubyGemsは、提供されているバージョンの最後の数字をインクリメントし、最大バージョンに達するまでそれを使用します。

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

それについて考えるための簡単な方法は、あなたが最後の数字は、いくつかの任意の値にインクリメントして大丈夫だということですが、文字列で、それに先立つものが大きくすることはできません:だから~>0.8.5は、意味的に等価ですあなたが提供したものよりも。したがって、~>0.8.5の場合、3桁目(5)は5以上であれば任意の値を使用できますが、先頭の0.8は「0.8」でなければなりません。

たとえば、0.9バージョンがいくつかの大きな変更を実装すると思われるが、0.8.xリリースシリーズ全体が単なるバグ修正であることがわかっている場合などです。

しかし、単に">=0.8.5"を使用すると、のいずれかがのバージョン0.8.5より遅くてもかまいません。上限はありません。あなたもこのような悲観的な制約を使用してgemspecとの依存関係を追加するために使用できる

+0

これは、[バックボーン(backbone)]のようなバージョン管理に4桁の数字を使用する宝石とどのように振る舞いますか? -on-rails](https://github.com/meleyal/backbone-on-rails)? – JJD

+2

@JJD:基本的には同じ動作でなければなりません。 4の最後の桁はバウンドせずにインクリメントすることができますが、3番目の桁はインクリメントできません(したがって '〜> 0.9.2.3'はv0.9.2.4またはv0.9.2.23では可能ですが、v0.9.3.0では許されません)。制約で3桁の数字しか指定しなかった場合、4番目の数字は本質的に無関係です。指定した最初の3文字に基づいて制限されます(例えば '〜> 0.9.2'は0.9.xyシリーズ'y 'のもの; 9はインクリメントできないという制約があります)。 – eldarerathis

+2

ルールには、「RubyGemsはバージョンの最後の数字をインクリメントします」という例外があります。 「〜4」は「任意のバージョン4以上」を意味すると思われるかもしれませんが、「それはありません」(http://stackoverflow.com/questions/24121960/why-does-the-gemfile-semantic-versioning- operator-produce-inconsistent-resu)、注意してください。 – hlascelles

2

@millisami:

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

あなたが宝石の開発について多くを知らないか、それだけになっている場合、これらはいくつかあります良い参考文献:

  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です –

関連する問題