how can I give a name to an anonymous class

S

sayoyo

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
 
G

gwtmp01

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

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
 
A

ara.t.howard

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

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
42


-a
 
D

David Vallner

Christian said:
(e-mail address removed) writes:



Object.const_set(className.to_s, genClass)

I think we should have "useless use of #{}"-awards. ;-)
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
 
D

David Vallner

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

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

David Vallner
 
R

Robert Klemme

David said:
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
:)

robert
 
A

ara.t.howard

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.

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
 
J

James Edward Gray II

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:
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
 
R

Robert Klemme

James said:
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. :)

robert
 
A

ara.t.howard

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.

time to make the coffee!

-a
 
J

James Edward Gray II

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.

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

James Edward Gray II
 
D

David Vallner

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.= )

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

David Vallner
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,062
Latest member
OrderKetozenseACV

Latest Threads

Top