gro*_*ser 218
Gem::Version.new('0.4.1') > Gem::Version.new('0.10.1')
Run Code Online (Sandbox Code Playgroud)
lev*_*lex 33
如果需要检查悲观版本约束,可以像这样使用Gem :: Dependency:
Gem::Dependency.new('', '~> 1.4.5').match?('', '1.4.6beta4')
Run Code Online (Sandbox Code Playgroud)
Dig*_*oss 19
class Version < Array
def initialize s
super(s.split('.').map { |e| e.to_i })
end
def < x
(self <=> x) < 0
end
def > x
(self <=> x) > 0
end
def == x
(self <=> x) == 0
end
end
p [Version.new('1.2') < Version.new('1.2.1')]
p [Version.new('1.2') < Version.new('1.10.1')]
Run Code Online (Sandbox Code Playgroud)
not*_*oop 15
你可以使用Versionomy
gem(可在github上获得):
require 'versionomy'
v1 = Versionomy.parse('0.1')
v2 = Versionomy.parse('0.2.1')
v3 = Versionomy.parse('0.44')
v1 < v2 # => true
v2 < v3 # => true
v1 > v2 # => false
v2 > v3 # => false
Run Code Online (Sandbox Code Playgroud)
Car*_*icz 10
我会做
a1 = v1.split('.').map{|s|s.to_i}
a2 = v2.split('.').map{|s|s.to_i}
Run Code Online (Sandbox Code Playgroud)
那你可以做
a1 <=> a2
Run Code Online (Sandbox Code Playgroud)
(可能还有所有其他"常规"比较).
...如果你想要一个<
或>
测试,你可以做例如
(a1 <=> a2) < 0
Run Code Online (Sandbox Code Playgroud)
如果你这么倾向,还是做一些功能包装.
Gem::Version
这是一个简单的方法:
%w<0.1 0.2.1 0.44>.map {|v| Gem::Version.new v}.max.to_s
=> "0.44"
Run Code Online (Sandbox Code Playgroud)
如果您希望不使用任何宝石而手工完成此任务,那么如下所示的方法应该可以工作,尽管看起来有些麻烦。
versions = [ '0.10', '0.2.1', '0.4' ]
versions.map{ |v| (v.split '.').collect(&:to_i) }.max.join '.'
Run Code Online (Sandbox Code Playgroud)
本质上,您将每个版本字符串都转换为整数数组,然后使用数组比较运算符。如果这是某些人需要维护的代码,则可以拆分组件步骤以使操作更容易一些。
归档时间: |
|
查看次数: |
22244 次 |
最近记录: |