我正在写一些如下代码:

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

它给出以下错误:
NoMethodError: undefined method `<<' for nil:NilClass

接下来,它将res变量设置为nil,如何解决此问题?

我尝试了各种方法,但是无法与ruby一起使用,我知道我提供的此代码段可以不用next(a == 4 ? res << a*a : res << a)来完成,但是在我的实际用例中,我有一些复杂的逻辑,无法做到这一点简单地。

最佳答案

更换

res << a*a and next if a == 2


next res << a*a if a == 2

现在,它将起作用。

例子 :-
#!/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]

Read the documentation of next

关于ruby-on-rails - 接下来如何与 ruby 注入(inject)一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26831922/

10-16 00:25