For循环在Ruby irb中不使用string.length

For循环在Ruby irb中不使用string.length,ruby,irb,Ruby,Irb,在irb中,bash shell,在mac上。如您所见,a是一个已定义的数组。把a.length放在parens中没有区别。输出应为数组,但不显示任何输出 >> a => ["ant", "bat", "cat", "42"] ?> for i in 0..a.length do ?> puts a[i] >> end ?> 循环是本教程中的一个练习:但它

在irb中,bash shell,在mac上。如您所见,a是一个已定义的数组。把a.length放在parens中没有区别。输出应为数组,但不显示任何输出

>> a
=> ["ant", "bat", "cat", "42"]
?> for i in 0..a.length do
?>       puts a[i]
>> end
?>
循环是本教程中的一个练习:但它位于付费墙后面。在文本中,它如下所示:

Listing 3.3: Combining array access and a for loop.

>> for i in 0..a.length do
?>   puts a[i]
>> end
ant
bat
cat
42
我假设a.length是个问题,因为以下方法有效:

?> for i in 0..3 do
?>     puts a[i]
>> end
ant
bat
cat
42

=> 0..4
我错过了什么?谢谢。

问题解决了

@克伦诺赢得了克比娃娃。甚至@benjessop提供的有用代码都不起作用,直到我从每个代码中省略了“do”。然后,一切都正常工作,包括我的原始示例

因此,解决方案:只需删除“do”


要明确的是,如果范围是0..3(或者,我假设,任何数字范围),则“do”起作用,但一旦我将3替换为变量len或a.length,包括“do”意味着在“end”之后,会出现?>,后面没有任何内容。再次键入“end”没有任何好处。我必须退出循环。

您最初的尝试给出了什么输出?有错误吗?您如何创建/初始化
a
?我通过做
a=[“ant”,“bat”,“cat”,“42”]
尝试了同样的方法,然后循环成功了。问题是循环样式
do
,它显然被解释为块样式
do
,因此irb错误地等待额外的
结束。绝对是个错误!这里的
do
(或者
then
)通常都是不必要的。我将代码粘贴到了你的问题中,效果很好。您应该使用
而不是
来保持迭代在一定范围内though@OmneBonum:虽然这是在Ruby中迭代数组的一种有点不寻常的方式,但我得到的输出正是您所期望的。如果
a
是一个空数组,但您已经证明它不是空的,那么代码不会给出输出的唯一方法就是。由于将一个范围内的变量与“do”组合而导致的循环失败似乎只是我在系统上遇到的情况。如果它像@Cremno建议的那样是一个bug,我该如何修复它?