ruby modules and classes

  • Thread starter Surendra Singhi
  • Start date
S

Surendra Singhi

Hello,

When I try the code below I get an error. Why is it so? Am I misunderstanding
how modules behave? How should the module be written so that `who_am_i' is
added as a method to the class Phonograph.

module Debug
def self.who_am_i?
"#{self.class.name} (\##{self.id}): #{self.to_s}"
end
end
class Phonograph
include Debug
end
Phonograph.who_am_i?

Thanks.

--
Surendra Singhi
http://ssinghi.kreeti.com, http://www.kreeti.com
Read the latest news at: http://news.kreeti.com
,----
| "O thou my friend! The prosperity of Crime is like unto the lightning,
| whose traitorous brilliancies embellish the atmosphere but for an
| instant, in order to hurl into death's very depths the luckless one
| they have dazzled." -- Marquis de Sade
`----
 
R

Ross Bamford

Hello,

When I try the code below I get an error. Why is it so? Am I misunderstanding
how modules behave? How should the module be written so that `who_am_i' is
added as a method to the class Phonograph.

module Debug
def self.who_am_i?
"#{self.class.name} (\##{self.id}): #{self.to_s}"
end
end
class Phonograph
include Debug
end
Phonograph.who_am_i?

Depends what you want, but how about:

module Debug
def who_am_i?
"#{self.class.name} (\##{self.object_id}): #{self.to_s}"
end
end

class Phonograph
class << self
include Debug
end
end

p Phonograph.who_am_i?

Or, if you want it as both class and instance methods, I like this
trick:

module Debug
def who_am_i?
"#{self.class.name} (\##{self.object_id}): #{self.to_s}"
end

def self.included(othermod)
othermod.extend(self)
end
end

class Phonograph
include Debug
end

p Phonograph.who_am_i?
p Phonograph.new.who_am_i?

(P.s. do you know about Object#inspect?)
 
S

Surendra Singhi

Hello Ross,

Ross Bamford said:
Depends what you want, but how about:
Thanks for your reply.
module Debug
def who_am_i?
"#{self.class.name} (\##{self.object_id}): #{self.to_s}"
end
end

class Phonograph
class << self
include Debug
end
end

p Phonograph.who_am_i?

In the meantime I found another way to do this:

class Phonograph
extend Debug
end

are the two methods equivalent, or is there any difference?
Or, if you want it as both class and instance methods, I like this
trick:

module Debug
def who_am_i?
"#{self.class.name} (\##{self.object_id}): #{self.to_s}"
end

def self.included(othermod)
othermod.extend(self)
end
end

class Phonograph
include Debug
end

p Phonograph.who_am_i?
p Phonograph.new.who_am_i?
(P.s. do you know about Object#inspect?)
Now I do.

Thanks once again, I appreciate your help.

--
Surendra Singhi
http://ssinghi.kreeti.com, http://www.kreeti.com
Read the latest news at: http://news.kreeti.com
,----
| Great wits are sure to madness near allied,
| And thin partitions do their bounds divide.
|
| (John Dryden, Absalom and Achitophel, 1681)
`----
 

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,780
Messages
2,569,611
Members
45,276
Latest member
Sawatmakal

Latest Threads

Top