0

私はハッシュを持っています(実際のものははるかに大きいです)

parsed = {"follower_count" => 500, "something_else" => "etc", "xyz" => "abc"}

そして、このようにぶらぶらしているクラス

 class Company
   attr_accessor :followers

   def initialize(thehash)
      @followers = thehash['follower_count']
   end
 end

最後に、他の問題が発生することを心配する前にエラーをスローするこのコードがあります

>> parsed.map {|t| Company.new(t)}
TypeError: can't convert String into Integer
  from (irb):7:in `[]'
  from (irb):7:in `initialize'
  from (irb):12:in `new'
  from (irb):12
  from (irb):12:in `map'
  from (irb):12:in `each'
  from (irb):12:in `map'
  from (irb):12
4

2 に答える 2

3

ハッシュを反復処理すると、ブロックは引数として配列を取得し、その配列にはハッシュ内の 1 つのペアのキーと値が (順番に) 含まれます。だから、ここで:

parsed.map { |t| ... }

tは実際には 2 要素の配列であり、通常次のように記述されます。

parsed.map { |k, v| ... }

次に、内部では、実際には 2 つの要素の配列である場合にハッシュとしてCompany#initialize扱っています。t

maponparsedをまったく使用したくない場合は、単に使用したいだけですCompany.new(parsed)

于 2012-07-10T02:58:44.993 に答える
2

mapハッシュで使用する場合、ブロックで 2 つの変数を使用する必要があります。

parsed.map {|k,v| .. use k and v here .. }

まったく反復したくないようです。それを次parsedの引数として使用したいと考えていますCompany.new

Company.new(parsed)
于 2012-07-10T02:59:10.907 に答える