【发布时间】:2020-08-04 04:53:39
【问题描述】:
在 irb、bash shell 中,在 mac 上。如您所见, a 是一个已定义的数组。将 a.length 放在括号中没有区别。输出应该是数组,但是没有输出。
>> a
=> ["ant", "bat", "cat", "42"]
?> for i in 0..a.length do
?> puts a[i]
>> end
?>
循环是本教程中的一个练习:link,但它位于付费墙后面。在文本中是这样的:
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
我错过了什么?谢谢。
【问题讨论】:
-
您最初尝试的输出是什么?有什么错误吗?
-
你如何创建/初始化
a?我通过a = ["ant", "bat", "cat", "42"]尝试了同样的事情,然后循环并且它工作了 -
问题是循环样式
do显然被解释为块样式do所以 irb 错误地等待额外的end。绝对是个bug!无论如何,这里的do(或then)通常是不必要的。 -
我将代码粘贴到您的问题中,它可以正常工作。你应该使用
...而不是..来保持你的迭代在边界内 -
@OmneBonum :虽然这是在 Ruby 中迭代数组的一种有点不寻常的方式,但我得到的输出正是您所期望的。您的代码不提供输出的唯一方法是
a是一个空数组,但您已经证明它不是空的。