[#42344] [ruby-trunk - Feature #5964][Open] Make Symbols an Alternate Syntax for Strings — Tom Wardrop <tom@...>

23 messages 2012/02/03

[#42443] [ruby-trunk - Bug #5985][Open] miniruby skews "make benchmark" results — Eric Wong <normalperson@...>

21 messages 2012/02/08

[#42444] [ruby-trunk - Bug #5986][Open] Segmentation Fault — Luis Matta <levmatta@...>

16 messages 2012/02/08

[#42471] [ruby-trunk - Feature #5995][Open] calling io_advise_internal() in read_all() — Masaki Matsushita <glass.saga@...>

20 messages 2012/02/10

[#42560] [ruby-trunk - Bug #6011][Open] ruby-1.9.3-p0/lib/webrick/utils.rb:184: [BUG] Segmentation fault — Vit Ondruch <v.ondruch@...>

12 messages 2012/02/13

[#42579] [ruby-trunk - Bug #6012][Open] Proc#source_location also return the column — Roger Pack <rogerpack2005@...>

14 messages 2012/02/14

[#42685] [ruby-trunk - Bug #6036][Open] Test failures in Fedora Rawhide/17 — Bohuslav Kabrda <bkabrda@...>

14 messages 2012/02/16

[#42697] [ruby-trunk - Bug #6040][Open] Transcoding test failure: Big5 to UTF8 not defined (MinGW) — Luis Lavena <luislavena@...>

10 messages 2012/02/16

[#42813] [ruby-trunk - Feature #6065][Open] Allow Bignum marshalling/unmarshalling from C API — Martin Bosslet <Martin.Bosslet@...>

22 messages 2012/02/23

[#42815] [ruby-trunk - Bug #6066][Open] Fix "control may reach end of non-void function" warnings for clang — Eric Hodel <[email protected]>

15 messages 2012/02/23

[#42857] [ruby-trunk - Feature #6074][Open] Allow alias arguments to have a comma — Thomas Sawyer <transfire@...>

20 messages 2012/02/24

[#42891] [ruby-trunk - Feature #6083][Open] Hide a Bignum definition — Koichi Sasada <redmine@...>

23 messages 2012/02/25

[#42906] [ruby-trunk - Bug #6085][Open] Treatment of Wrong Number of Arguments — Marc-Andre Lafortune <ruby-core@...>

14 messages 2012/02/25

[#42949] [ruby-trunk - Bug #6089][Open] Test suite fails with OpenSSL 1.0.1 — Vit Ondruch <v.ondruch@...>

13 messages 2012/02/26

[ruby-core:42905] [ruby-trunk - Feature #3131][Closed] add Kernel#Hash() method like Kernel#Array()

From: Yui NARUSE <naruse@...>
Date: 2012-02-25 06:13:17 UTC
List: ruby-core #42905
Issue #3131 has been updated by Yui NARUSE.

Status changed from Assigned to Closed

This has already done, only missed to close.
----------------------------------------
Feature #3131: add Kernel#Hash() method like Kernel#Array()
https://bugs.ruby-lang.org/issues/3131

Author: Suraj Kurapati
Status: Closed
Priority: Normal
Assignee: Yukihiro Matsumoto
Category: core
Target version: 2.0.0


=begin
 Hello,
 
 There is an imbalance of power in the Ruby core API (when it comes 
 to arrays and hashes) because it is easier to convert nil values 
 into empty arrays, thanks to Kernel#Array(), than it is to convert 
 nil values into empty hashes, due to lack of Kernel#Hash().
 
 To correct this asymmetry and restore a balance of power, please
 add a Kernel#Hash() method for converting nil, Array, and Hash
 values into hashes:
 
     module Kernel
       def Hash(value)
         if value.respond_to? :to_hash
           value.to_hash
         elsif value.respond_to? :to_ary
           Hash[*value.to_ary]
         elsif value.nil?
           {}
         else
           raise ArgumentError, "invalid value for Hash: #{value}"
         end
       end
     end
 
 For example, here is how I would use the above API:
 
     #-------------------------------------------------------------------------
     # CASE 1: to_hash
     #-------------------------------------------------------------------------
     
     real_hash = {:real => true}
     Hash(real_hash) # => {:real=>true}
 
     fake_hash = Object.new
     def fake_hash.to_hash
       {:fake => true}
     end
     Hash(fake_hash) # => {:fake=>true}
 
     #-------------------------------------------------------------------------
     # CASE 2: to_ary
     #-------------------------------------------------------------------------
     
     real_array = [:real, true]
     Hash(real_array) # => {:real=>true}
 
     fake_array = Object.new
     def fake_array.to_ary
       [:fake, true]
     end
     Hash(fake_array) # => {:fake=>true}
 
     #-------------------------------------------------------------------------
     # CASE 3: nil
     #-------------------------------------------------------------------------
 
     Hash(nil) # => {}
 
     #-------------------------------------------------------------------------
     # CASE 4: unsupported arguments
     #-------------------------------------------------------------------------
     
     >> Hash(true)
     ArgumentError: invalid value for Hash: true
             from (irb):74:in `Hash'
             from (irb):80
             from /usr/bin/irb:12:in `<main>'
 
     >> Hash(false)
     ArgumentError: invalid value for Hash: false
             from (irb):74:in `Hash'
             from (irb):81
             from /usr/bin/irb:12:in `<main>'
 
     >> Hash(123)
     ArgumentError: invalid value for Hash: 123
             from (irb):74:in `Hash'
             from (irb):82
             from /usr/bin/irb:12:in `<main>'
 
 Thanks for your consideration.
=end



-- 
http://bugs.ruby-lang.org/

In This Thread

Prev Next