使用Ruby注入时的Nil类

前端之家收集整理的这篇文章主要介绍了使用Ruby注入时的Nil类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是 Ruby的新手,我在使用inject方法时遇到了一个奇怪的问题.

当我做:

(1..10).inject(0) {|count,x| count + 1}

结果是10,正如预期的那样.但是,当我这样做

(1..10).inject(0) {|count,x| count + 1 if (x%2 == 0)}

我收到一个错误

NoMethodError: undefined method `+' for nil:NilClass
    from (irb):43
    from (irb):43:in `inject'
    from (irb):43:in `each'
    from (irb):43:in `inject'
    from (irb):43

我真的不明白为什么(大概)计数在第二个例子中是零,但不是第一个.在任何情况下,我如何使用注入计算从1到10的均衡?

解决方法

当条件不为真时,表达式计数1 if(x%2 == 0)返回nil,将该计数设置为,因为这是inject方法的性质.

您可以通过返回计数1来修复它,当它是偶数时,只计算它不是:

(1..10).inject(0) { |count,x| x % 2 == 0 ? count + 1 : count }

一个完全不同的解决方案是使用select来选择偶数并使用Array#length方法对它们进行计数.

(1..10).select { |x| x % 2 == 0 }.length

猜你在找的Ruby相关文章