Ruby 具有灵活停止变量的For循环

Ruby 具有灵活停止变量的For循环,ruby,Ruby,我需要写一个循环 for x in (1..y) 其中y变量可以以某种方式更改。我该怎么做 例如: for x in (1..y/x) 但它不起作用 我认为您可能对返回值感到困惑。这实际上很好,只是返回值等于原始范围 y = 4 for x in (1..y) puts x end # 1 # 2 # 3 # 4 #=> 1..4 这是一个。通常我们会使用带有保护子句的循环do: x = 1 loop do break if x >= y x += 1 ...

我需要写一个循环

for x in (1..y)
其中
y
变量可以以某种方式更改。我该怎么做

例如:

for x in (1..y/x)

但它不起作用

我认为您可能对返回值感到困惑。这实际上很好,只是返回值等于原始范围

y = 4
for x in (1..y)
  puts x
end
# 1
# 2
# 3
# 4
#=> 1..4

这是一个。

通常我们会使用带有保护子句的
循环do

x = 1
loop do
  break if x >= y
  x += 1
  ...
end
确保
y
大于
x
,否则它将无法执行任何操作
y
可以根据需要进行更改,只要大于x循环就会继续。只要
y
下降到
x
以下,循环将在下一次迭代中终止


注意:我使用
=
,因为平等性测试是一个等待中的bug。有时,我们试图比较
x
开始大于
y
的位置,或者我们增加一个浮点,将其与一个整数或另一个浮点进行比较,并使用
=
,但从不点击导致循环跑掉的神奇的“相等”。相反,总是检查大于或等于结束循环。

您能告诉我们这个用例吗?这是行不通的,因为x只是在循环中定义的,所以不能使用x来定义它何时停止,并且看起来y不是在这里定义的。在露比的大多数情况下,有更好的方法来循环收集一个集合。您必须在Sube中围绕<代码> y/x<代码>,以便在那里工作。您可以考虑这样做(例如):<代码> y=10;x=1;x打印
1,2,3
。顺便说一句,的
很少使用。注意,在Ruby中为
循环使用
不是惯用的方法。
for
循环将其中间变量泄漏到全局变量空间,这有时很有用,但通常不是我们想要做的事情。相反,我们使用
each
times
最多
或迭代器在数组或范围上循环。不,因为它是可选的……与更改
y
无关。