红宝石中的红宝石1.9方法1.8.6

时间:2009-07-19 17:19:26

标签: ruby methods

是否有宝石或库来获取像

这样的ruby 1.9方法
[1, 2, 3].combination(2)
[1, 2, 3].permutation(2)
[1, 2, 3].product([1, 2, 3])
[1, 2, 3, 4, 5].cycle

2 个答案:

答案 0 :(得分: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中的实施通过大多数RubySpecsfacets不是这种情况),以保证不存在兼容性问题。

答案 1 :(得分:3)

您可以尝试使用1.8.x版本的Ruby Facets(http://facets.rubyforge.org/)。 Facets已经变得有点混乱(在网站上注释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

您可能希望为这些方法中的某些方法添加别名以获得代码兼容性。

抱歉,这不太好。