how to add a "static method" dynamic ?

Y

Yan Rong

now , i know that i can use
"define_method" add a method dynamic,
but i want to know how to add a "static method" dynamic ?

thanks!
 
E

Erik Veenstra

now , i know that i can use "define_method" add a method
dynamic, but i want to know how to add a "static method"
dynamic ?

You can do this by using define_method in the context of the
singleton class of a class:

class << aClass
define_method .....
end

In Ruby, we prefer to call this a "class method". We don't use
the term "static method".

gegroet,
Erik V. - http://www.erikveen.dds.nl/

----------------------------------------------------------------

##############################################################

class Foo
class << self
define_method :eek:ne do
1
end
end

class << self
self
end.module_eval do
define_method :two do
2
end
end
end

##############################################################

class Bar
end

class << Bar
define_method :eek:ne do
1
end
end

class << Bar
self
end.module_eval do
define_method :two do
2
end
end

##############################################################

p Foo.one
p Foo.two

p Bar.one
p Bar.two

##############################################################

----------------------------------------------------------------
 
R

Robert Dober

now , i know that i can use
"define_method" add a method dynamic,
but i want to know how to add a "static method" dynamic ?

thanks!

There are no static methods, there are only instance methods.
But as about everything in Ruby is an Object, so is the class of your
object and so is the singleton class of your object, maybe the
following tricks are what you are looking for:
707/475 > cat class.rb && ruby class.rb
# vim: sts=2 sw=2 tw=0 expandtab nu:
class A
define_method :eek:ne do |p| "one(#{p})" end
class << self
define_method :two do |p| "two(#{p})" end
end
eval 'def self.three p ; "three(#{p})" end'
end


puts A.new.one(42)
puts A.two(42)
puts A.three(42)
one(42)
two(42)
three(42)

Sorry for the double post Erik but I was not about to discard all that
hard work ;)
Please note the ugliness of the eval for :three but it gets the job done.
Personally I almost always use the singleton class method definition
even when declaring statically, but I believe that it is not *exactly*
the same thing.

Cheers
Robert
 

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,764
Messages
2,569,565
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top