【问题标题】:Simplifying an "any of" check with or-operator in Ruby在 Ruby 中使用 or 运算符简化“任何”检查
【发布时间】:2013-05-10 13:30:34
【问题描述】:

如何简化下面的检查?...

if node[:base][:database][:adapter].empty? || node[:base][:database][:host].empty? || 
  node[:base][:database][:database].empty? || node[:base][:database][:port].empty? 

类似

required_keys = { :adapter, :host, :database...etc...} 
required keys - node[:base][:database] == [] 

这种语法有点偏离,但基本上是从所需的键集中减去你拥有的键。如果您的集合中有所有必需的键,则结果应该为空。

我不确定语法是否正确? .任何帮助将不胜感激

【问题讨论】:

    标签: ruby operators or-operator


    【解决方案1】:
    required_keys = [:adapter, :host, :database ]
    if required_keys.any?{|x| node[:base][:database][x].empty?}
      #code here
    end
    

    或者你也可以这样做:

    node[:base][:database].values_at(*required_keys).any?(&:empty?) 
    

    【讨论】:

      【解决方案2】:

      如果您认为要在多个地方使用此功能,您可以扩展 Hash 类并在初始化程序中要求扩展。

      class Hash
      
        def contains_values_for?(*keys)
          keys.all? do |key|
            self[key].present?
          end
        end
      
      end
      

      现在你可以这样做了:

      node[:base][:database].contains_values_for?(:adapter, :host, :database, :port)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-08
        • 1970-01-01
        • 1970-01-01
        • 2018-11-11
        • 1970-01-01
        • 2023-03-15
        相关资源
        最近更新 更多