Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.ruby > #2616 > unrolled thread

Copying parameters to singleton class

Started byLars Olsson <lasso@lassoweb.se>
First post2011-04-11 02:19 -0700
Last post2011-04-14 12:07 -0500
Articles 3 on this page of 23 — 4 participants

Back to article view | Back to comp.lang.ruby


Contents

  Copying parameters to singleton class Lars Olsson <lasso@lassoweb.se> - 2011-04-11 02:19 -0700
    Re: Copying parameters to singleton class Robert Klemme <shortcutter@googlemail.com> - 2011-04-11 04:34 -0500
      Re: Copying parameters to singleton class 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-11 21:21 -0500
      Re: Copying parameters to singleton class 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-11 21:05 -0500
        Re: Copying parameters to singleton class Robert Klemme <shortcutter@googlemail.com> - 2011-04-12 01:53 -0500
          Re: Copying parameters to singleton class 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-12 13:31 -0500
      Re: Copying parameters to singleton class 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-12 19:08 -0500
    Re: Copying parameters to singleton class Jesús Gabriel y Galán <jgabrielygalan@gmail.com> - 2011-04-11 04:36 -0500
      Re: Copying parameters to singleton class Lars Olsson <lasso@lassoweb.se> - 2011-04-11 02:53 -0700
    Re: Copying parameters to singleton class 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-11 21:48 -0500
      Re: Copying parameters to singleton class Robert Klemme <shortcutter@googlemail.com> - 2011-04-12 02:00 -0500
        Re: Copying parameters to singleton class Lars Olsson <lasso@lassoweb.se> - 2011-04-12 01:25 -0700
          Re: Copying parameters to singleton class Robert Klemme <shortcutter@googlemail.com> - 2011-04-12 03:51 -0500
          Re: Copying parameters to singleton class 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-12 13:14 -0500
            Re: Copying parameters to singleton class 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-12 13:38 -0500
        Re: Copying parameters to singleton class 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-12 13:43 -0500
    Re: Copying parameters to singleton class 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-12 19:29 -0500
      Re: Copying parameters to singleton class Lars Olsson <lasso@lassoweb.se> - 2011-04-13 01:49 -0700
    Re: Copying parameters to singleton class 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-13 19:32 -0500
    Re: Copying parameters to singleton class 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-13 19:49 -0500
      Re: Copying parameters to singleton class 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-13 20:09 -0500
        Re: Copying parameters to singleton class Lars Olsson <lasso@lassoweb.se> - 2011-04-14 01:33 -0700
          Re: Copying parameters to singleton class 7stud -- <bbxx789_05ss@yahoo.com> - 2011-04-14 12:07 -0500

Page 2 of 2 — ← Prev page 1 [2]


#2805

From7stud -- <bbxx789_05ss@yahoo.com>
Date2011-04-13 20:09 -0500
Message-ID<1d44884d670300413b19bb7a949f0a22@ruby-forum.com>
In reply to#2804
7stud -- wrote in post #992632:
> Try something like this:
>
>    def using(new_options)
>       Class.new(self) do
>         old_options = superclass.options
>         common_keys = old_options.keys & new_options.keys
>
>         common_keys.each do |key|
>           old_options[key] = new_options[key]
>         end
>
>         @options = old_options
>         @options.freeze
>       end
>     end

Whoops.  That doesn't work:

prog.rb:18:in `[]=': can't modify frozen hash (RuntimeError)

Hmmm...why can you merge() but not directly assign to individual keys 
when a hash is frozen?

Ok, merge() with some better variable names:

   def using(new_options)
      Class.new(self) do
        old_options = superclass.options

        @options = old_options.merge(new_options).select do |key|
           old_options.has_key?(key)
        end.freeze
      end
    end

-- 
Posted via http://www.ruby-forum.com/.

[toc] | [prev] | [next] | [standalone]


#2833

FromLars Olsson <lasso@lassoweb.se>
Date2011-04-14 01:33 -0700
Message-ID<e06738ad-4e68-4456-9bf2-4aedacb237c3@r14g2000vbm.googlegroups.com>
In reply to#2805
On 14 Apr, 03:09, 7stud -- <bbxx789_0...@yahoo.com> wrote:
> 7stud -- wrote in post #992632:
>
> > Try something like this:
>
> >    def using(new_options)
> >       Class.new(self) do
> >         old_options = superclass.options
> >         common_keys = old_options.keys & new_options.keys
>
> >         common_keys.each do |key|
> >           old_options[key] = new_options[key]
> >         end
>
> >         @options = old_options
> >         @options.freeze
> >       end
> >     end
>
> Whoops.  That doesn't work:
>
> prog.rb:18:in `[]=': can't modify frozen hash (RuntimeError)
>
> Hmmm...why can you merge() but not directly assign to individual keys
> when a hash is frozen?
>
> Ok, merge() with some better variable names:
>
>    def using(new_options)
>       Class.new(self) do
>         old_options = superclass.options
>
>         @options = old_options.merge(new_options).select do |key|
>            old_options.has_key?(key)
>         end.freeze
>       end
>     end
>
> --
> Posted viahttp://www.ruby-forum.com/.

Hi!

Even though I agress that using the same name for both the local
parameter and a method with the same name might be a bad idea, my code
still works without any problem. If I redefine self using to:

(minor change to last version. I split up the calls to merge, select,
and freeze to its own rows.)

  def self.using(options)
    Class.new(self) do
      puts "Superclass options: #{superclass.options.inspect}"
      puts "Options from parameter: #{options}"
      @options = superclass.options.merge(options)
      @options.select! { |key, value| superclass.options.has_key?
(key) }
      @options.freeze
    end
  end

it clearly shows that options (by itself) refers to the local paramter
and not the class name.

/lasso

[toc] | [prev] | [next] | [standalone]


#2860

From7stud -- <bbxx789_05ss@yahoo.com>
Date2011-04-14 12:07 -0500
Message-ID<67ce62e5cd8caf2df57fce35c89881ed@ruby-forum.com>
In reply to#2833
Lars Olsson wrote in post #992715:
> On 14 Apr, 03:09, 7stud -- <bbxx789_0...@yahoo.com> wrote:
>> >      old_options[key] = new_options[key]
>>
>>      old_options.has_key?(key)
>>     end.freeze
>>    end
>>   end
>>
>> --
>> Posted viahttp://www.ruby-forum.com/.
>
> Hi!
>
> Even though I agress that using the same name for both the local
> parameter and a method with the same name might be a bad idea, my code
> still works without any problem. If I redefine self using to:
>

There's working code, and there's clear code.  The goal: working code 
that is clear!

> Hmmm...why can you merge() but not directly assign to
> individual keys when a hash is frozen?

Duh.  Because merge() produces a new hash--it doesn't change the frozen 
hash.

-- 
Posted via http://www.ruby-forum.com/.

[toc] | [prev] | [standalone]


Page 2 of 2 — ← Prev page 1 [2]

Back to top | Article view | comp.lang.ruby


csiph-web