バージョン要件でのチルダより大きい(〜>)の意味?


92

~>gem仕様のバージョン要件の意味は何ですか?

hanna-0.1.12は[haml(〜> 2.2.8)]に依存します

27
精子演算子と呼ばれることもあります。
Andrew Grimm


3
+1 @SuckerForMayhem、「twiddle-wakka」の方がおかしい。新しいリンク:guides.rubygems.org/patterns/#pessimistic-version-constraint-これ自体がrobots.thoughtbot.com/rubys-pessimistic-operatorに
The Red Pea

2
@SuckerForMayhem Twiddle-wakkaは、チュパカブラのような伝説的な獣のように聞こえます。これは私のトピックへの貢献です。どういたしまして。
twiz

1
更新されたリンクのthx @TheRedPea
SuckerForMayhem

回答:


93

RubyGemsマニュアルでは、これを悲観的なバージョン制約と呼んでい ます

n部のバージョン番号、たとえば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.99993.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、y> = x n

これが「悲観的」制約と呼ばれる理由とその使用例も、と言った> x.y.zときは楽観的であるということです。これからずっと、ずっと永遠にAPIが変更されることはないと想定しているからです。もちろん、これはかなり大胆な仮定です。しかし、ほとんどのプロジェクトは、彼らがすることが許可されている場合についての規則持って 後方互換性を壊し、そしてどのように彼らは時にそのバージョン番号を変更する必要はありませんブレーク後方互換性を。悲観的制約を使用してこれらのバージョン番号付けルールをエンコードできるため、コードが常に機能し続けることが保証されます(他のプロジェクトの作成者が実際に自分のルールを順守していると仮定すると、残念ながら常にそうとは限りません) )。


32
つまり、〜>は、特定のバージョンと、最後の10進数の新しいサブバージョンのみを許可することを意味します。
Magne、2014

18

つまり、この記号を使用して、すべてのマイナーアップデートで宝石を最新の状態に保ち、アプリを壊す可能性があるメジャーアップデートを行わないようにすることができます。

たとえば、「〜> 1.2」は、gemを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
私はそうではありません。受け入れられた回答がこれをより詳細に説明してくれてうれしいです。この例に基づく説明は、オペレーターの意味を理解するのに本当に役立ちません。
tripleee 2018

-1

それは同じメジャー/マイナー部分を持つすべてのバージョンに一致します。これは、この場合、haml〜> 2.2.8がすべての2.2.xバージョンと一致することを意味します。

これを使用して、新しいgemでAPIの破壊的な変更が、この場合はハンナを破壊する新しく変更されたgemに依存しないことを確認できます。


7
これは間違いではありませんが、不完全です。違いundersatndすることが重要である~> 2.0~> 2.0.0かつてのマッチ2.0、2.1、2.2.7、および他のすべてまで(は含まない)3.0 -を。後者は、2.0、2.0.1、2.0.999、および2.1まで(ただし、これを含まない)のすべてに一致します。
James

5
@James A.ローゼンは:また、~> 2.2.8ではない答えの主張として、「任意の2.2.xの」バージョンと一致しますが、X≥8 IOWを有する唯一のバージョン2.2.xの:答えは間違いなく、誤っとを境に、さらに多くの不完全な最高の状態であります誤解を招く。
イェルクWミッターク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.