【问题标题】:Break loop when sum of array gets over certain value in Ruby当数组总和超过Ruby中的某个值时中断循环
【发布时间】:2016-05-26 15:10:34
【问题描述】:

当我要附加到的数组的总和达到某个数字 (20) 时,我想中断我的 while 循环。这是我尝试过的:

p1_score = []
p2_score = []

until p1_score.inject(:+) >= 20 || p2_score.inject(:+) >= 20 do

但我收到以下错误:

`play_game': undefined method `>=' for nil:NilClass (NoMethodError)

【问题讨论】:

  • 这只是你的一个 Int 没有设置,所以你有一个 nil 代替,你不能做例如 1 > nil 为了帮助你调试你可以使用 var.class 来看看是什么类型是 (Enumerable, Fixnum, Nil ...) 并发现哪个是 nil
  • 在每次迭代中对两个数组求和似乎有点浪费,而不是仅仅保持运行总数。

标签: arrays ruby append push


【解决方案1】:

问题是当p1_score = [],p1_score.inject(:+)返回nil

一个快速的解决方法——如果没有看到你的代码的更多上下文,我不能确定这是否是最好的解决方案——将显式强制inject(:+)返回一个整数,使用备用Enumerable#inject(initial, sym)语法:

until p1_score.inject(0, :+) >= 20 || p2_score.inject(0, :+) >= 20 do

【讨论】:

  • 这是完美的化身
  • @CarySwoveland 需要解释更多吗?
  • @hellogoodbye Cary 之所以说它丑是因为注入接口支持这个功能。如果支持,最好通过界面做某事,然后想出自己的做事方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
  • 2021-01-28
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多