How can I call foo in Bar.foo?

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

is there anything i can to to solve the problem

On Sat, Jun 12, 2010 at 12:33 AM, Ntys Dd [email protected] wrote:

Posted via http://www.ruby-forum.com/.

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 06/12/2010 07:33 AM, Ntys Dd wrote:

def Bar.foo
#Do something
#I want to call foo now
#And call bye
#…
end

is there anything i can to to solve the problem

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