[#401849] If statement — Masoud Ahmadi <lists@...>

Will anyone be able to point out what I am doing wrong.

15 messages 2012/12/02

[#401987] Trying to get "translator" to work — JD KF <lists@...>

So, basically, I'm trying to get the below code to work properly for

12 messages 2012/12/06

[#402012] Need help to select some listbox item in different listbox together — Jonathan Masato <lists@...>

Hello,

10 messages 2012/12/07

[#402045] if n belongs to set a and m belongs to set b repeat some steps, How? — "zubair a." <lists@...>

We can do so in java and similar languages like:

11 messages 2012/12/08

[#402078] Time.new(2001, 12, 3).to_i returns wrong value — Robert Buck <lists@...>

I am doing something that not many do, I am writing a database driver

9 messages 2012/12/09

[#402145] How I can create/extract a variable/hash into the current binding in Ruby? — Ramon de C Valle <rcvalle@...>

Hi,

12 messages 2012/12/12

[#402205] Wondering About Flatiron School — "Kevin Y." <lists@...>

Hi everyone!,

35 messages 2012/12/15
[#402207] Re: Wondering About Flatiron School — Chad Perrin <code@...> 2012/12/15

On Sat, Dec 15, 2012 at 11:51:08AM +0900, Kevin Y. wrote:

[#402214] Ruby quick reference arranged in ASCII sequence? — Old Grantonian <lists@...>

As a ruby beginner, I would be grateful for any links to a ruby

17 messages 2012/12/15

[#402226] print - and strip text between tags using Nokogiri — Paul Mena <lists@...>

I'm a Ruby Newbie trying to write a program to process thousands of HTML

13 messages 2012/12/15

[#402332] Perl to Ruby: regex captures to assignment. — "Derrick B." <lists@...>

Hello all,

37 messages 2012/12/19
[#402342] Re: Perl to Ruby: regex captures to assignment. — "Derrick B." <lists@...> 2012/12/20

First of all, thanks for the fast responses!

[#402352] Re: Perl to Ruby: regex captures to assignment. — Robert Klemme <shortcutter@...> 2012/12/20

On Thu, Dec 20, 2012 at 1:38 AM, Derrick B. <lists@ruby-forum.com> wrote:

[#402357] Re: Perl to Ruby: regex captures to assignment. — "Derrick B." <lists@...> 2012/12/20

Robert Klemme wrote in post #1089733:

[#402359] trying to strip characters from a line — Paul Mena <lists@...>

I'm reading a table from a MySQL database and then processing it row by

18 messages 2012/12/20

[#402394] simple division: -9 / 5 = -2 what? — "Derrick B." <lists@...>

$ irb

13 messages 2012/12/22

[#402412] POLS and string-handling — Paul Magnussen <lists@...>

Hi,

14 messages 2012/12/22

[#402460] "Open" dialog of Windows — "Damián M. González" <lists@...>

Hi guys, been researching about pop up the "open" file dialog of

11 messages 2012/12/24

[#402466] How do I install Ruby on my Ubuntu 12.10 partition. — Kaye Ng <lists@...>

I already have Ruby installed on my Windows 7 partition.

23 messages 2012/12/25

[#402510] Ruby Association Certified Ruby Programmer — Sean Westfall <lists@...>

How well respected is this certification in the industry: Ruby

27 messages 2012/12/27
[#402528] Re: Ruby Association Certified Ruby Programmer — Peter Hickman <peterhickman386@...> 2012/12/27

On 27 December 2012 01:28, Sean Westfall <lists@ruby-forum.com> wrote:

[#402555] numeric? — Brandon Weaver <keystonelemur@...>

I've found a bit of an annoyance trying to find out if a number is numeric

20 messages 2012/12/27

[#402580] Ruby Koans regarding Hashes. — "Derrick B." <lists@...>

I am trying to understand this, so let me know how I do. :) I know

18 messages 2012/12/28

[#402609] can't open new ruby program under "new" context menu — "Lee V." <lists@...>

I'm stuck on the new version at trying to do something very simple.

10 messages 2012/12/28

[#402642] require "test/unit" — "Mattias A." <lists@...>

Hi,

17 messages 2012/12/29
[#402667] Re: require "test/unit" — "Mattias A." <lists@...> 2012/12/31

Hi Dami=C3=A1n M. Gonz=C3=A1lez!

[#402747] Re: require "test/unit" — "Derrick B." <lists@...> 2013/01/04

Mattias A. wrote in post #1090700:

[#402749] Re: require "test/unit" — sto.mar@... 2013/01/04

Am 04.01.2013 19:48, schrieb Derrick B.:

Re: Help me improve Hash#rekey

From: Robert Klemme <shortcutter@...>
Date: 2012-12-10 12:22:17 UTC
List: ruby-talk #402101
On Sun, Dec 9, 2012 at 7:19 PM, Intransition <transfire@gmail.com> wrote:
> The note `TODO: Improve Hash#rekey code!!!` has been in my docs for too
> long. I could use other's insights and thought others might enjoy the
> challenge. So here's the code:

I think the problem is in the API.  That's what makes it too complex.
There are too many cases of specific handling and options (see below):

>   require 'facets/na'
>
>   class Hash
>
>     # Rekey a hash:
>     #
>     #   rekey()
>     #   rekey(from_key => to_key, ...)
>     #   rekey{|from_key| to_key}
>     #   rekey{|from_key, value| to_key}
>     #
>     # If a key map is given, then the first key is changed to the second
> key.
>     #
>     #   foo = { :a=>1, :b=>2 }
>     #   foo.rekey(:a=>'a')       #=> { 'a'=>1, :b=>2 }
>     #   foo.rekey(:b=>:x)        #=> { :a =>1, :x=>2 }
>     #   foo.rekey('foo'=>'bar')  #=> { :a =>1, :b=>2 }
>     #
>     # If a block is given, converts all keys in the Hash accroding to the
>     # given block procedure. If the block returns +NA+ for a given key,
>     # then that key will be left intact.

1. Unnecessary option: if the key is supposed to stay intact the block
should just return the original key.

>     #
>     #   foo = { :name=>'Gavin', :wife=>:Lisa }
>     #   foo.rekey{ |k| k.to_s }  #=>  { "name"=>"Gavin", "wife"=>:Lisa }
>     #   foo                      #=>  { :name =>"Gavin", :wife=>:Lisa }
>     #
>     # If no key map or block is given, then all keys are converted
>     # to Symbols.

2. Why that default?  In my mind this is too much implicit logic.
Also this can be easily achieved with

hash.rekey(&:to_sym)

>     #
>     # Note that if both a +key_map+ and a block are given, the +key_map+ is
>     # applied first then the block.

3. I would change that to EITHER block OR map argument, but not both.

> Not the use of `facets/na`. That is defined as:
>
>     class << NA = ArgumentError.new
>       def inspect ; 'N/A' ; end
>       def method_missing(*); self; end
>     end
>
> But it is really nothing more than a dummy object used to mean Not
> Applicable. So in the case of #rekey, if the block returns NA then the key
> goes unchanged. Thinking about it again now, it's probably unnecessary, but
> I had wanted a way to say "leave it alone" while also making sure that `nil`
> could still be used as a key (even if that's rare). Feel free to remove the
> NA business, but if you do please explain why you think its not needed.

If one needs a special key one can use a Symbol for that as
efficiently as nil.  nil is the value return if something is absent
and I believe it does not make for a good key in a Hash.

> Best solution will get their name put in front of CREDITs for the next
> release of Facets.

:-)

class Hash
  def rekey(mapping = nil, &convert)
    c = convert || mapping
    dup.tap do |h| # preserve type and defaults
      h.clear
      each_pair {|k, v| h[c[k] || k] = v}
    end
  end
end

Kind regards

robert


--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

In This Thread