Hi --

On Tue, 21 Dec 2004, Charles Mills wrote:

> irb(main):001:0> h = Hash.new("go fish")
> => {}
> irb(main):002:0> h.delete("foo")
> => nil
>
> $ ri Hash#delete
> ------------------------------------------------------------ Hash#delete
>     hsh.delete(key)                   => value
>     hsh.delete(key) {| key | block }  => value
> ------------------------------------------------------------------------
>     Deletes and returns a key-value pair from hsh whose key is equal
>     to key. If the key is not found, returns the default value. If the
>     optional code block is given and the key is not found, pass in the
>     key and return the result of block.
>
>        h = { "a" => 100, "b" => 200 }
>        h.delete("a")                              #=> 100
>        h.delete("z")                              #=> nil
>        h.delete("z") { |el| "#{el} not found" }   #=> "z not found"
>
>
> I expected
>> h.delete("foo") #=> "go fish"
> or for the docs to say 'If the key is not found, returns nil'.

That behavior seems to have changed since 1.6.8:

   ruby -ve 'h=Hash.new("x"); h[1]=2; p h.delete("y"); p h.delete(1)'
   ruby 1.6.8 (2002-12-24) [i686-linux]
   "x"
   2

though I can't find it mentioned in the ChangeLog.  (Maybe that's why
the doc wasn't updated.)


David

-- 
David A. Black
dblack / wobblini.net