Forum: Ruby how to add a "static method" dynamic ?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Yan R. (Guest)
on 2007-03-14 08:17
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!
Erik V. (Guest)
on 2007-03-14 13:31
(Received via mailing list)
> 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 :one 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 :one 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

 ##############################################################
Robert D. (Guest)
on 2007-03-14 13:44
(Received via mailing list)
On 3/14/07, Yan R. <removed_email_address@domain.invalid> wrote:
> 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!
>
> --
> Posted via http://www.ruby-forum.com/.
>
>

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 :one 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
This topic is locked and can not be replied to.