I won't advocate this as a solution, but it does seem to meet your
criterion.
module Bar
def foo
puts 'hello'
end
def bye
puts 'bye'
end
end
# Extends Bar's singleton class with its own instance methods
p (class << Bar ; self ; end).ancestors
Bar.extend Bar
p (class << Bar ; self ; end).ancestors
# since Bar is now an ancestor of itself, we can call super from within
class methods
def Bar.foo
puts "doing something"
super
bye
end
Bar.foo
···
On Sat, Jun 12, 2010 at 12:33 AM, Ntys Dd <ntysdd@gmail.com> wrote:
it's like this
.........................
module Bar
def foo
puts 'hello'
end
def bye
puts 'bye'
end
end
def Bar.foo #Do something #I want to call foo now #And call bye
#...
end
.........................
It does not really make sense since the first #foo you define is an instance method while the latter is a class method. When you have a class you do not have an instance available so on what instance would you intend to invoke #foo on? It can only work the other way round: you have the instance method invoking the class (module) method.
module Bar
def self.foo
puts "module method"
end
def foo
puts "instance method"
Bar.foo
end
end
irb(main):011:0> o = Object.new.extend Bar
=> #<Object:0x910a418>
irb(main):012:0> o.foo
instance method
module method
=> nil
Of course you can also do
module Bar
def uber_foo
foo
bye
end
end
Kind regards
robert
···
On 06/12/2010 07:33 AM, Ntys Dd wrote:
it's like this
........................
module Bar
def foo
puts 'hello'
end
def bye
puts 'bye'
end
end
def Bar.foo #Do something #I want to call foo now #And call bye
#...
end
........................