ruby - ruby 中的条件链接

标签 ruby

我已阅读 this question ,但我无法创建完整示例:

class Some
  def method_a
    puts "a"
  end

  def method_b
    puts "b"
  end

  def method_c
    puts "c"
  end
end

some = Some.new

a = true
b = true
c = true

l = []
l << :method_a if a
l << :method_b if b
l << :method_c if c

l.inject(some) { |obj, method|
  obj.send(method)
}

[demas @arch.local.net ][~/dev/study/ruby/oop]% ruby inject_ex.rb
a

inject_ex.rb:26:in block in <main>': undefined method method_b' for nil:NilClass

(NoMethodError)

from inject_ex.rb:26:in `each'

from inject_ex.rb:26:in `inject'

from inject_ex.rb:26:in `'

最佳答案

Inject 将 block 的返回值传递给下一次迭代。现在,您的 obj 在第一次迭代后具有 obj.send(:method_a) 的返回值。像这样修复你的注入(inject):

l.inject(some) { |obj, method|
  obj.send(method)
  obj
}

关于ruby - ruby 中的条件链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1807487/

相关文章:

ruby - RMagick 安装 : Can't find MagickWand. h

ruby-on-rails - Rails 5 - 如何创建自定义脚手架生成器?

Ruby:如何使用符号来表示数组中的事物?

Ruby - 将具有管道分隔值的数组转换为哈希数组

ruby-on-rails - gem 开发中的交易固定装置

在 Ubuntu 10.04 上使用 Bundler + Capistrano + Rails 3 安装 MySql 失败

ruby - DateTime 到 RFC3339 格式化问题作为 URL

ruby - 为什么我得到 "RAKEFILE ABORTED, NO RAKEFILE FOUND"?

php - 人脸检测和图像组合

ruby-on-rails - 如何查找*所有*匹配类别的项目