Ruby-Hash。使用变量选择

Ruby-Hash。使用变量选择,ruby,Ruby,尝试在选择枚举器中传递变量规则 match = companies.select{ |x| x[rule] > 10 } data.each do |item| item.each do |file_name,filter_settings| if file_name == "out1_1x.csv" output_file = file_name current_filter = filter_settings rule =

尝试在选择枚举器中传递变量规则

match = companies.select{ |x| x[rule] > 10  }

data.each do |item|
   item.each do |file_name,filter_settings|
     if file_name == "out1_1x.csv"
       output_file = file_name
       current_filter = filter_settings
       rule = filter_settings[:rule].to_sym
       condition = filter_settings[:condition]
       amount = filter_settings[:amount]
       p rule   # here i have :price
          match = companies.select{ |x| x[rule] > 10  }
         puts match
      end
    end
end
但是得到一个错误:

未定义的方法'>'

对于nil类,即使在规则中指定了值

companies.select{ |x| x[:price] > 10  }
这个任务还可以

公司被定义为具有以下结构的哈希数组:

{:name=>"ABC company", :code=>"RDCX", :price=>33,:volume=>79560}
{:name=>"DEF", :code=>"FFF", :price=>41, :volume=>367491}
我还想问一下,如何将“外部变量-规则、条件、数量”中的“完整参数集”传递给select枚举器

差不多

match = companies.select{ |x| x[rule] condition amount  }
Where condition is - ">", "<" "=" ?
match=companys.选择{| x | x[规则]条件金额}
如果条件为-“>”,“请查看he方法:


不过要小心,因为send可以调用所有方法。如果要排除私有方法,可能需要使用#public_send(请参阅链接)。或者如果只允许某些运算符,则可能需要创建一个要调用的操作白名单。
companies =[{:name=>"ABC company", :code=>"RDCX", :price=>33,:volume=>79560},
   {:name=>"DEF", :code=>"FFF", :price=>41, :volume=>367491}]
rule = :price
condition = :>
amount = 35

p companies.select{|h| h[rule].send(condition, amount)}

# => [{:name=>"DEF", :code=>"FFF", :price=>41, :volume=>367491}]