On Sun, Apr 13, 2008 at 2:51 AM, ara.t.howard <ara.t.howard / gmail.com> wrote:
>
>  On Apr 12, 2008, at 5:12 PM, Trans wrote:
>
> > Let see.... Facets:
> >
> >  class Hash
> >
> >   # Returns a new hash with only the given keys.
> >
> >   def slice(*keep_keys)
> >     h = {}
> >     keep_keys.each do |key|
> >       h[key] = fetch(key)
> >     end
> >     h
> >   end
> >
> >   # Replaces hash with a new hash having only the given keys.
> >   # This return the hash of keys removed.
> >
> >   def slice!(*keep_keys)
> >     removed = except(*keep_keys)
> >     replace(slice(*keep_keys))
> >     removed
> >   end
> >
> >  end
> >
>
>  okay, you should add the block form ;-)
>
>  headers.slice{|k,| k =~ %r/^HTTP_/}
>
>  handy.....
>
>  cheers.
>
>
>
>  a @ http://codeforpeople.com/
>  --
>  we can deny everything, except that we have the possibility of being
> better. simply reflect on that.
>  h.h. the 14th dalai lama
>
>
>
>
>
Hmm maybe it is a more consistent approach not to add a block to slice.

FWIAC, I use hselect, kselect and vselect, the simplified code
goes like this (1) of course
  def kselect  &blk
      hselect{ |k,| blk.call(k) }
  end
  def vselect &blk
      hselect{ |_,v| blk.call(v) }
  end
  def hselect &blk
     #almost Tom's code of course
  end

You might write
  h.slice(*[*1..10]){|k,v| whatever k, v }
which indeed I like

I would write
   h.slice(*[*1..10]).hselect{|k,v| whatever k, v}
which indeed I like less, *but* I dislike the inconsistency of #select now.

The ideal solution might be to add a block to Enumerator#select too,
what about that?

Cheers
Robert


(1) simplified because the magic dot notation implementing proxy is of
no interest here.


-- 
http://ruby-smalltalk.blogspot.com/

---
Whereof one cannot speak, thereof one must be silent.
Ludwig Wittgenstein