~>
gem仕様のバージョン要件の意味は何ですか?
hanna-0.1.12は[haml(〜> 2.2.8)]に依存します
~>
gem仕様のバージョン要件の意味は何ですか?
hanna-0.1.12は[haml(〜> 2.2.8)]に依存します
回答:
RubyGemsマニュアルでは、これを悲観的なバージョン制約と呼んでい ます。
n部のバージョン番号、たとえば1.3
(2部)または
3.5.6.2
(4部)を制約として指定したと仮定します。次に、制約を満たすために、バージョン番号は次の両方の条件を満たす必要があります
バージョン番号の最初のn-1部分は、制約の第n-1の部品と同一である(例えばなければならない1.x
、または3.5.6.x
一致が、0.x
または3.5.7.x
しない)と
バージョン番号の最後の部分はより大きくなるか、制約の最後の部分に等しい(例えばなければならない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、y> = x n
これが「悲観的」制約と呼ばれる理由とその使用例も、と言った> x.y.z
ときは楽観的であるということです。これからずっと、ずっと永遠にAPIが変更されることはないと想定しているからです。もちろん、これはかなり大胆な仮定です。しかし、ほとんどのプロジェクトは、彼らがすることが許可されている場合についての規則持って
後方互換性を壊し、そしてどのように彼らは時にそのバージョン番号を変更する必要はありませんブレーク後方互換性を。悲観的制約を使用してこれらのバージョン番号付けルールをエンコードできるため、コードが常に機能し続けることが保証されます(他のプロジェクトの作成者が実際に自分のルールを順守していると仮定すると、残念ながら常にそうとは限りません) )。
バンドルドキュメントはこれを要約するのが最善だと思います:
指定子〜>には特別な意味があり、例で最もよくわかります。〜> 2.0.3は、> = 2.0.3および<2.1と同じです。〜> 2.1は> = 2.1および<3.0と同じです。〜> 2.2.betaは、2.2.beta.12のようなプレリリースバージョンと一致します。
それは同じメジャー/マイナー部分を持つすべてのバージョンに一致します。これは、この場合、haml〜> 2.2.8がすべての2.2.xバージョンと一致することを意味します。
これを使用して、新しいgemでAPIの破壊的な変更が、この場合はハンナを破壊する新しく変更されたgemに依存しないことを確認できます。
~> 2.0
と~> 2.0.0
かつてのマッチ2.0、2.1、2.2.7、および他のすべてまで(は含まない)3.0 -を。後者は、2.0、2.0.1、2.0.999、および2.1まで(ただし、これを含まない)のすべてに一致します。
~> 2.2.8
うではない答えの主張として、「任意の2.2.xの」バージョンと一致しますが、X≥8 IOWを有する唯一のバージョン2.2.xの:答えは間違いなく、誤っとを境に、さらに多くの不完全な最高の状態であります誤解を招く。