Singleton aliases

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. :slight_smile:

On Friday 07 September 2007 21:19:04 Wilson B. wrote:

sym = :some_name_you_generated
metaclass.send :alias_method, sym, :each

More traditionally, this is usually a good place to consider using
inheritance. :slight_smile:

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”