Chris Cummer
12/20/2007 1:21:00 PM
On 20-Dec-07, at 12:19 AM, Jes=FAs Gabriel y Gal=E1n wrote:
> On Dec 20, 2007 6:25 AM, Wes Gamble <weyus@att.net> wrote:
>> Chris Cummer wrote:
>>> If I understand correctly what you're intending, you can sort'a get
>>> around it via the following technique in which the public =20
>>> priv_meth()
>>> over-rides the private one. This is not ideal though since it leaves
>>> priv_meth() public. Is this what you're thinking?
>>>
>>
>> Not exactly. I need to modify the body of priv_meth, not expose it
>> publicly.
>
> This works for me:
>
> irb(main):013:0> class A
> irb(main):014:1> def call_a; a; end
> irb(main):015:1> private
> irb(main):016:1> def a; "a"; end
> irb(main):017:1> end
> =3D> nil
> irb(main):019:0> A.new.public_methods.grep(/\Acall_a\Z|\Aa\Z/)
> =3D> ["call_a"]
> irb(main):020:0> A.new.call_a
> =3D> "a"
> irb(main):021:0> class A
> irb(main):022:1> private
> irb(main):023:1> def a; "new a"; end
> irb(main):024:1> end
> =3D> nil
> irb(main):025:0> A.new.public_methods.grep(/\Acall_a\Z|\Aa\Z/)
> =3D> ["call_a"]
> irb(main):026:0> A.new.call_a
> =3D> "new a"
>
> So it seems that the private method a can be redefined without =20
> making it public.
> Hope this helps,
Yep, you're right Jes=FAs. In my example switching to:
class TestClass
private
def priv_meth
return "dog"
end
end
redefines it and keeps it private as well. So yes, it does indeed =20
appear that the original poster can do what they want after all.