我有一个由哈希组成的数组,我们称之为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_behaved
为true
。
我迷失了如何实现这一点,有人可以给我建议。任何建议表示赞赏。谢谢!
答案 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