Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
how to add a "static method" dynamic ?
Yan Rong
3/14/2007 6:17:00 AM
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-...
.
2 Answers
Erik Veenstra
3/14/2007 11:31:00 AM
0
> 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.erikve...
----------------------------------------------------------------
##############################################################
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 Dober
3/14/2007 11:44:00 AM
0
On 3/14/07, Yan Rong <yananay@126.com> 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-...
.
>
>
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
--
You see things; and you say Why?
But I dream things that never were; and I say Why not?
-- George Bernard Shaw
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
how to add a "static method" dynamic ?
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password