2009-07-19 79 views
2

是否有宝石或库来获得类似于Ruby,Ruby 1.9的方法,红宝石1.8.6

[1, 2, 3].combination(2) 
[1, 2, 3].permutation(2) 
[1, 2, 3].product([1, 2, 3]) 
[1, 2, 3, 4, 5].cycle 
+0

我认为你的意思是1.8.6,这些工作在1.8.7 – BaroqueBobcat 2009-07-19 18:32:59

+0

正好 因为所有的服务器都有1.8.6,我无法更新所有的红宝石 – tig 2009-07-19 20:50:24

+0

有点像python'从未来的进口真棒特征`? – 2010-02-11 00:21:24

回答

8

这正是我的宝石backports的目标。

它在纯Ruby中实现了Ruby 1.8.7以及许多Ruby 1.9.x和2.0的所有新特性。这当然包括#combination,#permutation,#product#cycle

可以,例如:

require 'backports/1.8.7/array/combination' 
[1, 2, 3].combination(2) # => works, even in Ruby 1.8.6 

backports通过实施最RubySpecs(这是不是facets的情况下),以保证没有兼容性问题。

3

1.9方法你可以尝试红宝石面的1.8.x的版本(http://facets.rubyforge.org/)。方面已经变得有点混乱(请注意网站上的404),但我已经安装了旧版本的gem(1.8.54),其中有一些标准前的变化。

> gem install --version=1.8.54 facets 

然后:

gem 'facets', "~>1.8" 
require 'enumerator' 
require 'facets/core/enumerable/cartesian_product' 
require 'facets/core/enumerable/permutation' 
require 'facets/core/enumerable/each_combination' 

[1, 2, 3].enum_for(:each_combination,2).to_a # note - only each form is available 
[1, 2, 3].permutation(2) 
[1, 2, 3].cartesian_product([1, 2, 3])   # note - rename 
# Can't find .cycle equivalent after a quick search, maybe nothing there 

您可能需要别名一些方法来获取代码的兼容性。

对不起,它不是很好。