ruby在多种条件下选择

时间:2014-05-11 08:14:41

标签: ruby

我有一个由哈希组成的数组,我们称之为student

> $students
> [
    { :name=>"John",  :last_name=>"Nutter",  :rating=>7, :well_behaved=>true },
    { :name=>"Tom",   :last_name=>"Hanks",   :rating=>8, :well_behaved=>true },
    { :name=>"Jason", :last_name=>"Willams", :rating=>9, :well_behaved=>true }
]

我已实施select方法,以便从student

中按条件进行选择
def select selector
  $students.select(&selector)
end

def name_selector name
  ->(student) { student[:name] == name }
end

# ... other selectors

select(name_selector('Jason'))将返回姓名为Jason'的学生,这很不错。

我想要完成的是传递多个选择器,使用关键字参数实现为where

def where(name: nil, last_name: nil, rating: nil, well_behaved: nil)

end

预期:

select(where(name: 'Jason', well_behaved: true))将返回名字' Jason' well_behavedtrue

我迷失了如何实现这一点,有人可以给我建议。任何建议表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

def where(name: nil, last_name: nil, rating: nil, well_behaved: nil)
  ->(cd) {
    name         ? cd[:name]         == name  :        true &&
    last_name    ? cd[:last_name]    == last_name :    true &&
    rating       ? cd[:rating]       == rating :       true &&
    well_behaved ? cd[:well_behaved] == well_behaved : true
  }
end