ruby 1.9 методы в ruby ​​1.8.6 - PullRequest
       36

ruby 1.9 методы в ruby ​​1.8.6

2 голосов
/ 19 июля 2009

Есть ли гем или библиотека для получения методов 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 ]

8 голосов
/ 09 апреля 2010

Это и есть цель моего драгоценного камня 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 голосов
/ 20 июля 2009

Вы можете попробовать версии Ruby Facets для версии 1.8.x (http://facets.rubyforge.org/). Facets стал чем-то вроде беспорядка (примечание 404 на веб-сайте), но у меня установлена ​​старая версия гема (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

Вы можете использовать псевдонимы некоторых из этих методов для обеспечения совместимости кода.

Извините, это не здорово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...