web-dev-qa-db-de.com

Was ist der Unterschied zwischen ~> und> = bei der Angabe von Rubygem in Gemfile?

Ich sehe oft die folgende Notation (~>) in Gemfile.

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

Ich weiß, dass das Vorzeichen (> =) nur größer oder gleich ist, aber was bedeutet die (~>) Notation? Sind beide gleich oder haben sie einen signifikanten Unterschied?

112
Autodidact

Das ist eine pessimistische Versionsbeschränkung . RubyGems erhöht die letzte Ziffer in der angegebenen Version und verwendet sie, bis eine maximale Version erreicht ist. So ~>0.8.5 ist semantisch äquivalent zu:

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

Die einfache Möglichkeit, darüber nachzudenken, besteht darin, dass es Ihnen recht ist, wenn die letzte Ziffer auf einen beliebigen Wert erhöht wird, aber die vorangestellten Stellen in der Zeichenfolge dürfen nicht größer sein als die von Ihnen angegebenen. Also für ~>0.8.5, jeder Wert ist für die dritte Ziffer (die 5) akzeptabel, vorausgesetzt, er ist größer oder gleich 5, aber die führende 0,8 muss "0,8" sein.

Sie können dies beispielsweise tun, wenn Sie glauben, dass die 0.9-Version einige wichtige Änderungen implementieren wird, aber Sie wissen, dass die gesamte 0.8.x-Versionsserie nur Bugfixes enthält.

Verwenden Sie jedoch einfach ">=0.8.5" würde anzeigen, dass jede Version später als (oder gleich) 0.8.5 akzeptabel ist. Es gibt keine Obergrenze.

157
eldarerathis

@millisami Sie können sogar Abhängigkeiten mit der Gemspec hinzufügen, indem Sie die pessimistische Einschränkung wie folgt verwenden:

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

Wenn Sie nicht viel über die Entwicklung von Edelsteinen wissen oder sich gerade damit beschäftigen, sind dies einige gute Referenzen:

  1. Tutorial, in dem Sie lernen, wie Sie Ihr eigenes RubyGem erstellen, die damit verbundenen Standardverfahren anwenden und wie Sie es hochladen, damit andere es installieren können.
  2. Wie man mit Bundler einen Gem von Grund auf erstellt
2
strangeloops