这是我得到的错误。我需要将一个字符串键传递给一个通常接受字符串键和字符串符号组合
的方法Dictionary
is empty when created`
can add whole entries with keyword and definition
add keywords (without definition) (FAILED - 1)
Failures:
1) Dictionary add keywords (without definition)
**Failure/Error: @d.add('fish')
NoMethodError:
undefined method `each' for "fish":String
# ./11_dictionary/dictionary.rb:9:in `add'**
# ./11_dictionary/dictionary_spec.rb:27:in `block (2 levels) in <top (required)>'
这是以下规格。 @d.add('fish')传递一个没有定义的字符串。 要求'字典'
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
我的代码:
我认为我的定义是出错的地方。根据我的理解,每个都通过这个例子中的数组或散列,但只有一个值,所以它不知道如何循环它?所以我考虑为意义和单词设置默认的nil值,但它不接受它并带有不同的错误。
class Dictionary
attr_accessor :keywords, :entries
def initialize
@entries = {}
end
def add(definition)
definition.each do |word, meaning|
@entries[word] = meaning
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
def entries
@entries
end
end
先谢谢你的帮助!
答案 0 :(得分:1)
您正试图在each
String
上致电@d.add('fish')
,这是不允许的。您只需在definition.each do |word, meaning|
上方添加以下行:
definition = { definition => nil } unless definition.is_a? Hash
如果您将不同类型的对象传递给add
,这可能会产生意想不到的后果。
答案 1 :(得分:0)
我的代码很粗糙..这也有效。
def add(hash)
if(hash.is_a?Hash)
@d=hash
否则
@d = {hash => nil}
端