How can I give a name to an anonymous class

Hi,

I'm try to create a generic anonymous class, and I want to set the
class name of the class, however I can't find a function which allow me
to do this, the only way I can do this is actually assigner the newly
create class to a constant. the classname will be (in my case)
GenActRec::className.

Does someone know how to remove the "GenActRec::" ???

Does someone know is there another way to do this???

this is my generic class:

class GenActRec < ActiveRecord::Base

  def self.buildNewTableClass(className, tableName)
    genClass = Class.new(GenActRec)
    const_set("#{className.to_s}", genClass)
    genClass.set_table_name tableName
    genClass.reset_column_information()
    return genClass
  end

end

Thanks you very much

Sayoyo

Just change this to:

  Object.const_set("#{className.to_s}", genClass)

So that the constant is placed in the top-level instead of
in your class.

Gary Wright

···

On Jan 11, 2006, at 10:38 AM, sayoyo@yahoo.com wrote:

const_set("#{className.to_s}", genClass)

harp:~ > cat a.rb
   class A
     c = Class::new do
       def foo
         42
       end
     end

     ::B = c
     Object::const_set 'B2', c
   end

   p B::new.foo
   p B2::new.foo

   harp:~ > ruby a.rb
   42

-a

···

On Thu, 12 Jan 2006 sayoyo@yahoo.com wrote:

Hi,

I'm try to create a generic anonymous class, and I want to set the
class name of the class, however I can't find a function which allow me
to do this, the only way I can do this is actually assigner the newly
create class to a constant. the classname will be (in my case)
GenActRec::className.

Does someone know how to remove the "GenActRec::" ???

Does someone know is there another way to do this???

this is my generic class:

class GenActRec < ActiveRecord::Base

  def self.buildNewTableClass(className, tableName)
    genClass = Class.new(GenActRec)
    const_set("#{className.to_s}", genClass)
    genClass.set_table_name tableName
    genClass.reset_column_information()
    return genClass
  end

end

--
strong and healthy, who thinks of sickness until it strikes like lightning?
preoccupied with the world, who thinks of death, until it arrives like
thunder? -- milarepa

gwtmp01@mac.com writes:

const_set("#{className.to_s}", genClass)

Just change this to:

  Object.const_set("#{className.to_s}", genClass)

    Object.const_set(className.to_s, genClass)

I think we should have "useless use of #{}"-awards. :wink:

···

On Jan 11, 2006, at 10:38 AM, sayoyo@yahoo.com wrote:

So that the constant is placed in the top-level instead of
in your class.

Gary Wright

--
Christian Neukirchen <chneukirchen@gmail.com> http://chneukirchen.org

Christian Neukirchen wrote:

gwtmp01@mac.com writes:

const_set("#{className.to_s}", genClass)
     

Just change this to:

Object.const_set("#{className.to_s}", genClass)
   

   Object.const_set(className.to_s, genClass)

I think we should have "useless use of #{}"-awards. :wink:

And useless #to_s awards. If anything, #to_str is somewhat useful to get a type check, but coercing types with reckless abandon you'll shoot yourself in the foot when you least expect it.

David Vallner

···

On Jan 11, 2006, at 10:38 AM, sayoyo@yahoo.com wrote:

David Vallner <david@vallner.net> writes:

Christian Neukirchen wrote:

gwtmp01@mac.com writes:

const_set("#{className.to_s}", genClass)
     

Just change this to:

Object.const_set("#{className.to_s}", genClass)
   

   Object.const_set(className.to_s, genClass)

I think we should have "useless use of #{}"-awards. :wink:

And useless #to_s awards. If anything, #to_str is somewhat useful to
get a type check, but coercing types with reckless abandon you'll
shoot yourself in the foot when you least expect it.

...except Symbol doesn't have #to_str.

···

On Jan 11, 2006, at 10:38 AM, sayoyo@yahoo.com wrote:

David Vallner

--
Christian Neukirchen <chneukirchen@gmail.com> http://chneukirchen.org

Oh, joy. Not like that matters in this specific case, but I can well imagine that use. I guess it's time to dig out the metaprogramming helmets to prevent severe trauma when banging heads against walls.

David Vallner

···

On Thu, 12 Jan 2006 14:15:38 +0100, Christian Neukirchen <chneukirchen@gmail.com> wrote:

David Vallner <david@vallner.net> writes:

Christian Neukirchen wrote:

gwtmp01@mac.com writes:

   Object.const_set(className.to_s, genClass)

I think we should have "useless use of #{}"-awards. :wink:

And useless #to_s awards. If anything, #to_str is somewhat useful to
get a type check, but coercing types with reckless abandon you'll
shoot yourself in the foot when you least expect it.

...except Symbol doesn't have #to_str.

David Vallner wrote:

Oh, joy. Not like that matters in this specific case, but I can well
imagine that use. I guess it's time to dig out the metaprogramming
helmets to prevent severe trauma when banging heads against walls.

Um, where do we get those? Couldn't find any at http://www.thinkgeek.com
:slight_smile:

    robert

it's why i __always__ use

   "#{ obj }" # no useless after all

instead of obj.to_s or obj.to_str. it works - forget about it. same goes for

   [ obj ].flatten

when a list is needed.

-a

···

On Thu, 12 Jan 2006, David Vallner wrote:

On Thu, 12 Jan 2006 14:15:38 +0100, Christian Neukirchen > <chneukirchen@gmail.com> wrote:

David Vallner <david@vallner.net> writes:

Christian Neukirchen wrote:

gwtmp01@mac.com writes:

   Object.const_set(className.to_s, genClass)

I think we should have "useless use of #{}"-awards. :wink:

And useless #to_s awards. If anything, #to_str is somewhat useful to
get a type check, but coercing types with reckless abandon you'll
shoot yourself in the foot when you least expect it.

...except Symbol doesn't have #to_str.

Oh, joy. Not like that matters in this specific case, but I can well imagine that use. I guess it's time to dig out the metaprogramming helmets to prevent severe trauma when banging heads against walls.

--
strong and healthy, who thinks of sickness until it strikes like lightning?
preoccupied with the world, who thinks of death, until it arrives like
thunder? -- milarepa

"David Vallner" <david@vallner.net> writes:

On Thu, 12 Jan 2006 14:15:38 +0100, Christian Neukirchen

   Object.const_set(className.to_s, genClass)

And useless #to_s awards. If anything, #to_str is somewhat useful to
get a type check, but coercing types with reckless abandon you'll
shoot yourself in the foot when you least expect it.

...except Symbol doesn't have #to_str.

Oh, joy. Not like that matters in this specific case, but I can well
imagine that use. I guess it's time to dig out the metaprogramming
helmets to prevent severe trauma when banging heads against walls.

Sorry. I really wonder what I was thinking when I wrote that.
It has to be like that, of course:

    Object.const_set(className.to_sym, genClass)

This allows for passing of strings and symbols. (And Fixnums, oh well.)

···

David Vallner

--
Christian Neukirchen <chneukirchen@gmail.com> http://chneukirchen.org

it's why i __always__ use

  "#{ obj }" # no useless after all

As far as I know, thats always equivalent to obj.to_s, which I think is better looking:

>> class MyString
>> def to_s; "to_s called" end
>> def to_str; "to_str called" end
>> end
=> nil
>> my_string = MyString.new
=> to_s called
>> "#{my_string}"
=> "to_s called"
>> class MyString
>> undef to_s
>> end
=> nil
>> "#{my_string}"
NoMethodError: undefined method `to_s' for #<MyString:0x31d59c>
         from /usr/local/lib/ruby/1.8/irb.rb:154:in `inspect'
         from /usr/local/lib/ruby/1.8/irb.rb:154:in `eval_input'
         from /usr/local/lib/ruby/1.8/irb.rb:259:in `signal_status'
         from /usr/local/lib/ruby/1.8/irb.rb:147:in `eval_input'
         from /usr/local/lib/ruby/1.8/irb/ruby-lex.rb:244:in `each_top_level_statement'
         from /usr/local/lib/ruby/1.8/irb/ruby-lex.rb:230:in `each_top_level_statement'
         from /usr/local/lib/ruby/1.8/irb/ruby-lex.rb:229:in `each_top_level_statement'
         from /usr/local/lib/ruby/1.8/irb.rb:146:in `eval_input'
         from /usr/local/lib/ruby/1.8/irb.rb:70:in `start'
         from /usr/local/lib/ruby/1.8/irb.rb:69:in `start'
         from /usr/local/bin/irb:13
Maybe IRB bug!!

James Edward Gray II

···

On Jan 12, 2006, at 9:06 AM, ara.t.howard@noaa.gov wrote:

Hoolay! Look, mom, no type coercion! The little Java demons in the back of my skull cackle with glee at yet another potential obscure bug avoided. (Happily ignoring any potential obscure bugs introduced, of course).

David Vallner

···

On Thu, 12 Jan 2006 17:48:35 +0100, Christian Neukirchen <chneukirchen@gmail.com> wrote:

Sorry. I really wonder what I was thinking when I wrote that.
It has to be like that, of course:

    Object.const_set(className.to_sym, genClass)

This allows for passing of strings and symbols. (And Fixnums, oh well.)

James Edward Gray II wrote:

···

On Jan 12, 2006, at 9:06 AM, ara.t.howard@noaa.gov wrote:

it's why i __always__ use

  "#{ obj }" # no useless after all

As far as I know, thats always equivalent to obj.to_s, which I think
is better looking:

.... and more efficient - especially if the object is a string already. :slight_smile:

    robert

ya know - you are right. for some reason i seemed to remember the default
to_s going away with the default to_a - it seems it did not.

time to make the coffee!

-a

···

On Fri, 13 Jan 2006, James Edward Gray II wrote:

On Jan 12, 2006, at 9:06 AM, ara.t.howard@noaa.gov wrote:

it's why i __always__ use

  "#{ obj }" # no useless after all

As far as I know, thats always equivalent to obj.to_s, which I think is better looking:

--
strong and healthy, who thinks of sickness until it strikes like lightning?
preoccupied with the world, who thinks of death, until it arrives like
thunder? -- milarepa

Even if it did, "#{...}" doesn't call to_str(). :wink:

James Edward Gray II

···

On Jan 12, 2006, at 9:47 AM, ara.t.howard@noaa.gov wrote:

On Fri, 13 Jan 2006, James Edward Gray II wrote:

On Jan 12, 2006, at 9:06 AM, ara.t.howard@noaa.gov wrote:

it's why i __always__ use
  "#{ obj }" # no useless after all

As far as I know, thats always equivalent to obj.to_s, which I think is better looking:

ya know - you are right. for some reason i seemed to remember the default
to_s going away with the default to_a - it seems it did not.