所以我正在解決RSPEC問題,並且我在這個網站上獲得的所有幫助都很棒。儘管如此,我也遇到了一些麻煩。從紅寶石轉換爲紅色的哈希
的想法是在Ruby中創建一個Dictionary對象和RSPEC代碼看起來像
require 'dictionary'
describe Dictionary do
before do
@d = Dictionary.new
end
it 'is empty when created' do
@d.entries.should == {}
end
it 'can add whole entries with keyword and definition' do
@d.add('fish' => 'aquatic animal')
@d.entries.should == {'fish' => 'aquatic animal'}
@d.keywords.should == ['fish']
end
it 'add keywords (without definition)' do
@d.add('fish')
@d.entries.should == {'fish' => nil}
@d.keywords.should == ['fish']
end
it 'can check whether a given keyword exists' do
@d.include?('fish').should be_false
end
it "doesn't cheat when checking whether a given keyword exists" do
@d.include?('fish').should be_false # if the method is empty, this test passes with nil returned
@d.add('fish')
@d.include?('fish').should be_true # confirms that it actually checks
@d.include?('bird').should be_false # confirms not always returning true after add
end
it "doesn't include a prefix that wasn't added as a word in and of itself" do
@d.add('fish')
@d.include?('fi').should be_false
end
it "doesn't find a word in empty dictionary" do
@d.find('fi').should be_empty # {}
end
it 'finds nothing if the prefix matches nothing' do
@d.add('fiend')
@d.add('great')
@d.find('nothing').should be_empty
end
it "finds an entry" do
@d.add('fish' => 'aquatic animal')
@d.find('fish').should == {'fish' => 'aquatic animal'}
end
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
it 'lists keywords alphabetically' do
@d.add('zebra' => 'African land animal with stripes')
@d.add('fish' => 'aquatic animal')
@d.add('apple' => 'fruit')
@d.keywords.should == %w(apple fish zebra)
end
it 'can produce printable output like so: [keyword] "definition"' do
@d.add('zebra' => 'African land animal with stripes')
@d.add('fish' => 'aquatic animal')
@d.add('apple' => 'fruit')
@d.printable.should == %Q{[apple] "fruit"\n[fish] "aquatic animal"\n[zebra] "African land animal with stripes"}
end
end
我把一切都上升到「找到的條目」,這是我碰到的麻煩。到目前爲止我的代碼看起來像這樣。並感謝這個網站上所有幫助我構建代碼的人。
class Dictionary
attr_accessor :keywords, :entries
def initialize
@entries = {}
end
def add(defs)
defs.each do |word, definition|
@entries[word] = definition
end
end
def keywords
@entries.keys.sort
end
def include?(key)
@entries.key?(key)
end
def find(query)
@entries.select { |word, definition| word.scan(query).join == query}
end
end
和我得到的該測試的錯誤是:
1) Dictionary finds an entry
Failure/Error: @d.find('fish').should == {'fish' => 'aquatic animal'}
expected: {"fish"=>"aquatic animal"}
got: [["fish", "aquatic animal"]] (using ==)
Diff:
@@ -1,2 +1,2 @@
-"fish" => "aquatic animal"
+[["fish", "aquatic animal"]]
因此,它看起來就像是從查找方法是一個數組,而不是一個Hash輸出的問題。解決這個問題最好的方法是什麼?先謝謝你!
下一次,考慮讓你的問題最小化;這裏不需要完整的實現和規範。 – 2013-03-07 16:14:07