所以我首先要完成测试,但有点卡住了。到目前为止,这是我的代码:
class Dictionary
attr_accessor :entries, :keywords, :item
def initialize
@entries = {}
end
def add(item)
item.each do |words, definition|
@entries[words] = definition
end
end
def keywords
@entries.keys
end
end#class
我卡在了这里的 rspec 测试中:
it 'add keywords (without definition)' do
@d.add('fish')
@d.entries.should == {'fish' => nil}
@d.keywords.should == ['fish']
end
我如何切换我的 add 方法来接受键/值对,或者只接受一个值为 nil 的键?第一个测试指定散列在创建时为空,所以我不能在那里给它默认值。
最佳答案
可以检查传递给 add
方法的参数类型。是否不是Enumerable
,这显然是包含在 Array
、Hash
es 等中的 mixin,只需将其值分配给 nil
:
def add(item)
case item
when Enumerable
item.each do |words, definition|
@entries[words] = definition
end
else
@entries[item] = nil
end
end
请注意 case
使用“case equality ” 来检查参数类型。
关于ruby - 如何创建一个将散列(有或没有指定值)作为参数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29575367/