バージョン要件のチルダ大なり (~>) の意味は?

概要

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


hanna-0.1.12 depends on [haml (~> 2.2.8)]

解決策

RubyGems マニュアルではこれを 悲観的なバージョン制約。

n 部分のバージョン番号を指定したと仮定します。 1.3 (2 部構成) または 制約として 3.5.6.2 (4 部構成)。次に、制約を満たすために、 バージョン番号は次の両方の条件を満たしている必要があります

言い換えると


~> x1.x2.x3. … .xn-2.xn-1.xn

マッチ


x1.x2.x3. … .xn-2.xn-1.y, y >= xn

これが「悲観的」制約と呼ばれる理由と、そのユースケース それは、単に > x.y.z と言うとき、あなたは楽観的であるということです。 今後、永遠に API は決して変更されません。これ もちろん、これはかなり大胆な仮定です。ただし、ほとんどのプロジェクトには次のようなルールがあります。 彼らが許可されるとき 下位互換性を破壊し、 そして、逆方向にブレークしたときにバージョン番号をどのように変更する必要があるか 互換性。これらのバージョン番号付けルールは、悲観的なメソッドを使用してエンコードできます。 制約があるため、コードが常に動作し続けることが保証されます。 (他のプロジェクトの作成者が実際に自分のプロジェクトに準拠していると仮定します) ルールに従う必要がありますが、残念ながら常にそうとは限りません)。