我想在每次循环迭代中增加我的步长值,但我的解决方案无效。
n=1
(0..100).step(n) do |x|
puts x
n+=1
end
有没有办法改变" n"或者我必须使用" while loop"或其他什么?
答案 0 :(得分:7)
我假设您正在尝试打印1,3,6,10,15,21等
迭代范围,将每个第n个元素传递给块。如果范围 包含数字,每次迭代都会添加n。
因此,您尝试做的事情不能用step
完成。 while
或传统for
循环应该可以解决问题。
答案 1 :(得分:3)
这是基于Enumerator
的自定义Aurélien Bottazini's answer:
tri = Enumerator.new do |y|
n = 0
step = 1
loop do
y << n
n = n + step
step += 1
end
end
tri.take(10)
#=> [0, 1, 3, 6, 10, 15, 21, 28, 36, 45]
tri.take_while { |i| i < 100 }
#=> [0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91]
答案 2 :(得分:2)
我认为做你想做的最好的方法是使用while循环。
step = 1
last = 100
i = 0
while (i < last )
puts i
step += 1
i += step
end
有可能通过步骤来完成它,但它需要你完全理解它是如何工作的,并且可能使用一些hacky东西来使它工作。但是,如果您已经有了一个简单的解决方案,为什么要这样做呢?
答案 3 :(得分:2)
我会使用loop
和break
n = 0
step = 1
loop do
puts n
n = n + step
step += 1
break if n > 100
end
答案 4 :(得分:0)
我认为你现在要问的是,我现在再次看一下,正在改变step
方法给出的step
内的论据。这是不可能的,因为在步骤可以继续执行其运行给定块的工作之前评估步骤的参数,并分配块变量x
。