Ruby列出下n个数字的简单方法

Ruby列出下n个数字的简单方法,ruby,jruby,Ruby,Jruby,在ruby中,我们可以通过多种方式轻松生成1到n个数字,如 1.最多(10).到a [*1..10] 但是我想从给定的数字中找出接下来的n个数字。例如,如果给定的数字是250,那么找到下一个20个数字(250..270)的最简单方法是什么 一种方法是: n.upto(n+next), 所以 我只是想知道是否有一种默认的ruby方法/方法来处理这个问题。您还可以使用范围上的惰性求值,并执行类似的操作 250.upto(1.0/0).take(20) 我认为Ruby中没有内置的东西,但是如

在ruby中,我们可以通过多种方式轻松生成1到n个数字,如

  • 1.最多(10).到a
  • [*1..10]
但是我想从给定的数字中找出接下来的n个数字。例如,如果给定的数字是250,那么找到下一个20个数字(250..270)的最简单方法是什么

一种方法是:

n.upto(n+next), 
所以


我只是想知道是否有一种默认的ruby方法/方法来处理这个问题。

您还可以使用范围上的惰性求值,并执行类似的操作

250.upto(1.0/0).take(20)

我认为Ruby中没有内置的东西,但是如何编写自己的方法:

class Integer
  def next_with_step(step = nil)
    if step.is_a?(Fixnum)
      upto(self + step).to_a
    else
      next_without_step
    end
  end
  alias_method :next_without_step, :next
  alias_method :next, :next_with_step
end


1.next
=> 2
1.next(3).inspect
=> [1, 2, 3, 4]

下面是一个如何实现这一点的示例:

n = 250
m = 5

puts (0...m).map{ |i| i + n }.inspect #=> [250, 251, 252, 253, 254]

Ruby 1.9还有
Float::INFINITY
,这比除法黑客更明显。或者:
put(n-1…n+m).map(&:next)
。一个重新打开的类monkeypatch和一个与关键字冲突的别名?哎呀。首先,我不理解有人反对猴子修补术。请看@dhh的演示,因为猴子补丁是有史以来最好的东西,它定义了Ruby!其次,
next
可以安全使用,它已经在stdlib内部的Intger类中定义。我亲自听了dhh的介绍,但它并没有让我相信monkeypatching(或freedom patching,或其他任何东西)并没有更多地用于邪恶而不是善。对于一次性,对于您不打算分发的代码,可以。对于本应具有生产价值的代码,尤其是您打算供其他人使用的代码,重新打开的类monkeypatching是不负责任和懒惰的。
n = 250
m = 5

puts (0...m).map{ |i| i + n }.inspect #=> [250, 251, 252, 253, 254]