0

これは私が得ているエラーです。通常は文字列キーと文字列記号の組み合わせを受け入れるメソッドに文字列キーを渡す必要があります

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

私のコード:

私の定義だと思います。それぞれが間違っているところです。私が理解していることから、この例ではそれぞれが配列またはハッシュを通過しますが、値が1つしかないため、ループする方法がわかりませんか? そのため、意味と単語にデフォルトの 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

事前に助けてくれてありがとう!

4

2 に答える 2

1

inを呼び出そうとしていますeachが、これは許可されていません。上に次の行を追加するだけです。String@d.add('fish')definition.each do |word, meaning|

definition = { definition => nil } unless definition.is_a? Hash

ただし、さまざまな種類のオブジェクトを に渡す場合、予期しない結果が生じる可能性がありますadd

于 2013-06-12T18:30:57.937 に答える
0

私のコードはラフです..これもうまくいきます。

デフ追加(ハッシュ)

if (hash.is_a? ハッシュ)

  @d=hash

そうしないと

  @d = {hash => nil} 

終わり

于 2013-08-24T06:48:19.863 に答える