Hello all.
I have a class with instance method “each” and i want to add variable
aliases for it based on some preferences of the generated objects.
Did some one know how i can achieve this?
On Sep 7, 12:06 pm, Nikolay P. [email protected] wrote:
I have a class with instance method “each” and i want to add variable
aliases for it based on some preferences of the generated objects.
class Foo
def each
p “each called for #{self}”
yield
end
end
f1 = Foo.new
def f1.some(&block)
each(&block)
end
f1.each{ p ‘hi!’ }
#=> “each called for #Foo:0x7ffa72cc”
#=> “hi!”
f1.some{ p ‘aliased’ }
#=> “each called for #Foo:0x7ffa72cc”
#=> “aliased”
f2 = Foo.new
class << f2
alias_method :yow, :each
end
f2.yow{ p ‘simpler’ }
#=> “each called for #Foo:0x7ffa6e30”
#=> “simpler”
On 9/7/07, Nikolay P. [email protected] wrote:
Hello all.
I have a class with instance method “each” and i want to add variable
aliases for it based on some preferences of the generated objects.
Did some one know how i can achieve this?
This is one way. There are several.
I am assuming you mean that only that particular instance should have
this method, and not other instances of the same class.
metaclass = class << self;self;end
sym = :some_name_you_generated
metaclass.send :alias_method, sym, :each
More traditionally, this is usually a good place to consider using
inheritance.
On Friday 07 September 2007 21:19:04 Wilson B. wrote:
sym = :some_name_you_generated
metaclass.send :alias_method, sym, :eachMore traditionally, this is usually a good place to consider using
inheritance.
Wow. Thanks for all suggestions. But that one was really helpful and
simple
to me and i’ve come up to this implementation:
def singleton_alias(alias_name, name)
klass = class << self; self; end
klass.send :alias_method, alias_name.to_sym, name.to_sym
end
On Sep 7, 12:06 pm, Nikolay P. [email protected] wrote:
I have a class with instance method “each” and i want to add variable
aliases for it based on some preferences of the generated objects.
Adding one more option to my last post:
class Foo
def each
p “each called for #{self}”
yield
end
end
f1 = Foo.new
def f1.some(&block)
each(&block)
end
f1.each{ p ‘hi!’ }
#=> “each called for #Foo:0x7ffa72cc”
#=> “hi!”
f1.some{ p ‘aliased’ }
#=> “each called for #Foo:0x7ffa72cc”
#=> “aliased”
f2 = Foo.new
class << f2
alias_method :yow, :each
end
f2.yow{ p ‘simpler’ }
#=> “each called for #Foo:0x7ffa6e30”
#=> “simpler”
module BonkerTime
def go_bonkers( &block ); each( &block ); end
end
f3 = Foo.new
f3.extend( BonkerTime )
f3.go_bonkers{ p “w00t” }
#=> “each called for #Foo:0x7ffa6908”
#=> “w00t”