我如何使用正则表达式来通过这个rspec测试?

时间:2015-04-11 22:26:32

标签: ruby regex rspec

我在通过rspec测试时遇到了一些麻烦。我的方法已经通过了所有其他测试,除了最后一个测试,如果关键字匹配参数或者关键字具有相同的前缀(如果前缀是参数),则需要返回字/哈希对。在后一种情况下,如果有多个匹配,则返回的哈希应该包括所有匹配。因为,我所拥有的代码返回整个哈希值,所以似乎正在进行正则表达式的比较?我尝试了多种方法,但这里有两个,第一个是我回复的,因为它通过了大多数测试。

def find(word)
    returns = {}
    if @entries.empty? 
    @entries 
    else 
      @entries.select{|key, value| if key.scan(/word/) then @entries[key] = value  end } 
    end
  end

返回失败:

1) Dictionary finds multiple matches from a prefix and returns the entire entry (keyword + definition)                                                          
     Failure/Error: @d.find('fi').should == {'fish' => 'aquatic animal', 'fiend' => 'wicked person'}                                                              
       expected: {"fish"=>"aquatic animal", "fiend"=>"wicked person"}                                                                                             
            got: {"fish"=>"aquatic animal", "fiend"=>"wicked person", "great"=>"remarkable"} (using ==)  

----------------------------------------------- -

我的下一次尝试:

def find(word_or_prefix)
    returns = {}
    if @entries.empty? 
      return @entries 
    else 
      @entries.select{|key, value| if (/word_or_prefix/ =~ key) then returns <<  @entries[key] = value  end } 
    end
    returns
  end

返回失败:

1) Dictionary finds an entry                                                                                                                                    
     Failure/Error: @d.find('fish').should == {'fish' => 'aquatic animal'}                                                                                        
       expected: {"fish"=>"aquatic animal"}                                                                                                        
            got: {} (using ==)                                                                                                                                    
       Diff:                                                                                                                                                      
       @@ -1,2 +1 @@                                                                                                                                              
       -"fish" => "aquatic animal",                                                                                                                               

使用正则表达式让这段代码通过的最佳方法是什么?为什么我目前的代码没有传递?

虽然总共有4个关于find方法的测试块,但是我遇到麻烦的那个(第4个):

 it 'finds multiple matches from a prefix and returns the entire entry (keyword + definition)' do
    @d.add('fish' => 'aquatic animal')
    @d.add('fiend' => 'wicked person')
    @d.add('great' => 'remarkable')
    @d.find('fi').should == {'fish' => 'aquatic animal', 'fiend' => 'wicked person'}
  end 

1 个答案:

答案 0 :(得分:2)

我认为你在寻找:

@entries.select{|key, value| key[/#{word}/] }