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?
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 Sep 7, 12:06 pm, Nikolay Pavlov <qpa...@gmail.com> 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.
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 9/7/07, Nikolay Pavlov <qpadla@gmail.com> 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?
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"
···
On Sep 7, 12:06 pm, Nikolay Pavlov <qpa...@gmail.com> 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.
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 Friday 07 September 2007 21:19:04 Wilson Bilkovich wrote:
On 9/7/07, Nikolay Pavlov <qpadla@gmail.com> 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, :eachMore traditionally, this is usually a good place to consider using
inheritance.