如何使用下注入红宝石

Sau*_*abh 8 ruby ruby-on-rails

我写的代码如下:

[1,2,3,4,5].inject([]) do |res, a|
  res << a*a and next if a == 2
  res << a
end
Run Code Online (Sandbox Code Playgroud)

它给出以下错误:

NoMethodError: undefined method `<<' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

如下所示它res变量为nil,如何解决这个问题?

我尝试了各种各样的方法,但无法接下来使用ruby,我知道我提供的这个片段可以在没有next(a == 4 ? res << a*a : res << a)的情况下完成,但在我的实际用例中我有一些复杂的逻辑而且不能简单地完成.

Aru*_*hit 13

更换

res << a*a and next if a == 2
Run Code Online (Sandbox Code Playgroud)

next res << a*a if a == 2
Run Code Online (Sandbox Code Playgroud)

现在,它会工作.

示例: -

#!/usr/bin/env ruby

ar = [1,2,3,4,5].inject([]) do |res, a|
  next res << a*a if a == 2
  res << a
end

p ar
# >> [1, 4, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

阅读文档 next

next 可以取一个值,这将是块当前迭代返回的值....