我在通过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
答案 0 :(得分:2)
我认为你在寻找:
@entries.select{|key, value| key[/#{word}/] }