On May 27, 2009, at 11:42 PM, Sandworth Meb wrote:

> class Kam
>
>  def self.call_private
>    kam=Kam.new
>    kam.private_method
>  end
>
> private
>
>  def private_method
>    puts "can't do that"
>  end
>
> end
>
> Kam.call_private #exception: called private method

You can't do that because private methods cannot have an explicit  
caller (that is if "bar" is a private method, you can't do "foo.bar"  
or "self.bar" inside of foo, but you can simply do "bar" inside of  
foo). I would also STRONGLY suggest you rethink what you're attempting  
to do. If you need to expose a method, then expose it. If you need a  
method to only be exposed on the class, then use a class method.

That said (you've been warned!), you can do this:

class Kam
   def self.call_private
     kam = Kam.new
     kam.instance_eval("private_method")
   end

   private

   def private_method
     puts "can do this"
   end
end

Kam.call_private


...but my STRONG suggestion is that you DON'T do that.

Cheers,

Josh