加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用Ruby注入时的Nil类

发布时间:2020-12-17 04:28:48 所属栏目:百科 来源:网络整理
导读:我是 Ruby的新手,我在使用inject方法时遇到了一个奇怪的问题. 当我做: (1..10).inject(0) {|count,x| count + 1} 结果是10,正如预期的那样.但是,当我这样做 (1..10).inject(0) {|count,x| count + 1 if (x%2 == 0)} 我收到一个错误: NoMethodError: undefi
我是 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读