代码之家  ›  专栏  ›  技术社区  ›  tokhi

检查多哈希键(如果存在)[已关闭]

  •  -3
  • tokhi  · 技术社区  · 9 年前

    有重构这种情况的技巧吗?

     params = {:p1=>"foo", :p2=>true, :p3=>nil, :pN=>""}
    
     if params[:p1].present? && params[:p2].present? && params[:pN].present?
      # do something...
    
    3 回复  |  直到 9 年前
        1
  •  3
  •   Sergio Tulentsev    9 年前

    大致如下:

    params.values_at(:p1, :p2, :pN).all?(&:present?)
    
        2
  •  1
  •   Kristján    9 年前
    if params.values_at(*%i[p1 p2 p3]).all?(&:present?)
    

    values_at 返回一个 Array 您提供的每个键的值。 all? true iff谓词( present? )是 真的 对于可枚举的每个成员。 值_位于 将包括 nil 对于缺少的键(而不是省略它),所以您不必担心数组会向下折叠为仅显示值。

        3
  •  1
  •   Cary Swoveland    9 年前
    keys = [:p1, :p2, :pN]
    
    puts "hi" if keys.all? { |k| params[k].present? }
    

    这样做的好处是,只要 params[k].present? false .