【问题标题】:For loop not working with string.length in Ruby irbFor 循环在 Ruby irb 中不能使用 string.length
【发布时间】: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 是一个空数组,但您已经证明它不是空的。

标签: ruby irb


【解决方案1】:

解决了。

@Cremno 赢得了丘比娃娃。直到我省略了每个代码中的“do”,甚至@benjessop 提供的有用代码都不起作用。然后,一切正常,包括我原来的例子。

所以,解决方案:只需删除“做”

需要明确的是,如果范围是 0..3(或者,我假设是任何数字范围),“do”就可以工作,但是一旦我将 3 替换为变量 len 或 a.length,包括“do”表示在 'end' 之后,出现 ?>,后面什么都没有。再次键入“结束”没有好处。我必须 ^C 退出循环。

【讨论】:

  • 由于组合范围内的变量和“做”而导致循环失败似乎只是在我的系统上发生的事情。如果它像@Cremno 所建议的那样是一个错误,我该如何修复它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 2014-11-20
  • 2020-08-07
相关资源
最近更新 更多