Hello Ross,

Ross Bamford <rossrt / roscopeco.co.uk> writes:

> On Wed, 2006-03-01 at 23:57 +0900, Surendra Singhi wrote:
>> 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:
>
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)
`----