Afficher un message
Vieux 19/06/2008, 15h46   #4
Mike Barton
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: I don't really understand inject

I see, I see, I see.
That solved the problem. Thanks for that injection!
Ha Ha Ha!

On Jun 19, 2:36pm, Jesús Gabriel y Galán <jgabrielyga...@gmail.com>
wrote:
> On Thu, Jun 19, 2008 at 3:13 PM, Mike Barton <barton.mich...@gmail.com> wrote:
> > I think these methods should both do the same thing. The second works,
> > however in the first I get errors that string is not matched, where
> > hash is an instance of String not hash

>
> > def sequences
> > self.alignment.split(/\n/).inject(Hash.new) do |hash, line|
> > id, sequence = line.split(/\s+/,2)
> > # hash.class == String
> > hash[id] = sequence
> > end
> > end

>
> How inject works is that it passes the block two values:
> an accumulator and one of the elements in the enumerable
> (one at a time). In each iteration, the accumulator will be the
> return value of the block in the previous iteration.
>
> So in your example, if you want the accumulator to be a hash,
> your block should return a hash. Try this (untested):
>
> def sequences
> self.alignment.split(/\n/).inject(Hash.new) do |hash, line|
> id, sequence = line.split(/\s+/,2)
> # hash.class == String
> hash[id] = sequence
> hash # <<< the change
> end
> end
>
> Hope this s,
>
> Jesus.


  Réponse avec citation
 
Page generated in 0,04840 seconds with 9 queries