Bug #16164
closedENV.each with block returns ENV object itself, not Hash
Description
My code:
x = ENV.each { |name, value| }
puts "Return value class: #{x.class}"
puts "Return value is a Hash? #{x.kind_of?(Hash)}"
puts "Return value is actually ENV itself? #{x.object_id == ENV.object_id}"
Its output:
Return value class: Object
Return value is a Hash? false
Return value is actually ENV itself? true
I expected a Hash, because the doc says:
each { |name, value| block } → Hash
There 's some danger here, because if I modify the returned object, I'm actually modifying ENV itself.
I think this is also true for a number of other methods in ENV; e.g., ENV.delete_if.
Files
Updated by sawa (Tsuyoshi Sawada) over 4 years ago
That is a documentation bug.
Updated by shevegen (Robert A. Heiler) over 4 years ago
I remember the old pickaxe having mentioned ENV as a hash-like
object. I guess the documentation could be updated to include
e. g. specifically a .is_a? Hash check too, and explain that
ENV is not completely a "full" Hash.
Updated by burdettelamar@yahoo.com (Burdette Lamar) over 4 years ago
I'm attaching a diff that:
- Enhances the test to verify the returned object, which is ENV.
- Corrects the documentation to say that the returned object is ENV, not a Hash.
Updated by jeremyevans (Jeremy Evans) over 4 years ago
- Status changed from Open to Closed
Applied in changeset git|27144de2bd95c5886c3d4400c3b8aea932b856f1.
Fix documentation for ENV.each to return ENV
Also have spec check that it returns ENV.
Mostly from burdettelamar@yahoo.com (Burdette Lamar).
Fixes [Bug #16164]