ruby - 如何创建一个将散列(有或没有指定值)作为参数的方法?

标签 ruby rspec

所以我首先要完成测试,但有点卡住了。到目前为止,这是我的代码:

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 ,这显然是包含在 ArrayHashes 等中的 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/

相关文章:

ruby - 在 Ruby 中,如何选择在给定场景中使用符号还是字符串?

ruby-on-rails - 如果还有错误

ruby-on-rails - rspec 不适用于设计用户身份验证

ruby-on-rails - 在 Ruby Rspec 自动化中集成数据库清洁器 gem 的问题

ruby-on-rails - 博客文章的简单模型

ruby-on-rails - 从 tmp 文件夹 Heroku 打开文件

ruby-on-rails - Rake 任务失败没有要加载的文件 -- nokogiri/nokogiri for Rails 2.2.2

ruby - 两个几乎相同的规范;一位通过,一位失败

ruby-on-rails - 如何 stub :where method in Rspec?

rspec - 如何找到哪个 rspec 测试花费了这么长时间