[#35631] [Ruby 1.9 - Bug #4558][Open] TestSocket#test_closed_read fails after r31230 — Tomoyuki Chikanaga <redmine@...>

23 messages 2011/04/06

[#35632] [Ruby 1.9 - Bug #4559][Open] Proc#== does not match the documented behaviour — Adam Prescott <redmine@...>

13 messages 2011/04/06

[#35637] [Ruby 1.9 - Bug #4561][Open] 1.9.2 requires parentheses around argument of method call in an array, where 1.8.7 did not — Dave Schweisguth <redmine@...>

9 messages 2011/04/07

[#35734] [Ruby 1.9 - Feature #4574][Open] Numeric#within — redmine@...

16 messages 2011/04/13

[#35753] [Ruby 1.9 - Bug #4576][Open] Range#step miss the last value, if end-exclusive and has float number — redmine@...

61 messages 2011/04/14
[#39566] [Ruby 1.9 - Bug #4576] Range#step miss the last value, if end-exclusive and has float number — Marc-Andre Lafortune <ruby-core@...> 2011/09/15

[#39590] [Ruby 1.9 - Bug #4576] Range#step miss the last value, if end-exclusive and has float number — Marc-Andre Lafortune <ruby-core@...> 2011/09/16

[#39593] Re: [Ruby 1.9 - Bug #4576] Range#step miss the last value, if end-exclusive and has float number — Tanaka Akira <akr@...> 2011/09/16

2011/9/17 Marc-Andre Lafortune <[email protected]>:

[#39608] Re: [Ruby 1.9 - Bug #4576] Range#step miss the last value, if end-exclusive and has float number — Masahiro TANAKA <masa16.tanaka@...> 2011/09/17

I have not been watching ruby-core, but let me give a comment for this issu=

[#35765] [Ruby 1.9 - Bug #4579][Open] SecureRandom + OpenSSL may repeat with fork — redmine@...

27 messages 2011/04/15

[#35866] [Ruby 1.9 - Bug #4603][Open] lib/csv.rb: when the :encoding parameter is not provided, the encoding of CSV data is treated as ASCII-8BIT — yu nobuoka <nobuoka@...>

13 messages 2011/04/24

[#35879] [Ruby 1.9 - Bug #4610][Open] Proc#curry behavior is inconsistent with lambdas containing default argument values — Joshua Ballanco <jballanc@...>

11 messages 2011/04/25

[#35883] [Ruby 1.9 - Bug #4611][Open] [BUG] Segementation fault reported — Deryl Doucette <me@...>

15 messages 2011/04/25

[#35895] [Ruby 1.9 - Feature #4614][Open] [RFC/PATCH] thread_pthread.c: lower RUBY_STACK_MIN_LIMIT to 64K — Eric Wong <normalperson@...>

10 messages 2011/04/25

[ruby-core:35857] [Ruby 1.9 - Feature #3131] add Kernel#Hash() method like Kernel#Array()

From: Suraj Kurapati <sunaku@...>
Date: 2011-04-22 23:52:12 UTC
List: ruby-core #35857
Issue #3131 has been updated by Suraj Kurapati.


Integer() and Float() in Ruby 1.9.2 raise TypeError and ArgumentError:

 $ irb
 ## ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
 >> Float(nil)
 TypeError: can't convert nil into Float
 	from (irb):6:in `Float'
 	from (irb):6
 	from /usr/bin/irb:12:in `<main>'
 >> Float('meow')
 ArgumentError: invalid value for Float(): "meow"
 	from (irb):8:in `Float'
 	from (irb):8
 	from /usr/bin/irb:12:in `<main>'

I don't know which error type we should raise in Kernel#Hash().
----------------------------------------
Feature #3131: add Kernel#Hash() method like Kernel#Array()
http://redmine.ruby-lang.org/issues/3131

Author: Suraj Kurapati
Status: Assigned
Priority: Normal
Assignee: Yukihiro Matsumoto
Category: core
Target version: 1.9.x


 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.


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

In This Thread

Prev Next