How can I call foo in Bar.foo ?

N

Ntys Dd

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
 
J

Josh Cheek

[Note: parts of this message were removed to make it a legal post.]

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

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
 
R

Robert Klemme

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

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,999
Messages
2,570,243
Members
46,836
Latest member
login dogas

Latest Threads

Top