我是Ruby的新手,我在使用inject方法时遇到了一个奇怪的问题.
当我做:
(1..10).inject(0) {|count,x| count + 1}
Run Code Online (Sandbox Code Playgroud)
结果是10,正如预期的那样.但是,当我这样做
(1..10).inject(0) {|count,x| count + 1 if (x%2 == 0)}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
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
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么(大概)计数在第二个例子中是零,但不是第一个.在任何情况下,我如何使用注入计算从1到10的均衡?
Jer*_*ten 14
当条件不为真时,表达式count + 1 if (x%2 == 0)返回nil,count设置为,因为这是inject方法的本质.
您可以通过count + 1在是偶数时返回来修复它,而count当它不是时:
(1..10).inject(0) { |count,x| x % 2 == 0 ? count + 1 : count }
Run Code Online (Sandbox Code Playgroud)
一种完全不同的解决方案是使用select选择偶数并使用该Array#length方法对它们进行计数.
(1..10).select { |x| x % 2 == 0 }.length
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3528 次 |
| 最近记录: |