[#2617] irb for 1.5.x — Andrew Hunt <Andy@...>
5 messages
2000/05/03
[#2639] OT: Japanese names — Dave Thomas <Dave@...>
4 messages
2000/05/09
[#2643] Ruby Toplevel — Dave Thomas <Dave@...>
7 messages
2000/05/09
[#2656] Re: Append alias for Array.append? — Aleksi Niemel<aleksi.niemela@...>
Hideto ISHIBASHI:
5 messages
2000/05/09
[#2660] win OLE / eRuby — Andrew Hunt <Andy@...>
8 messages
2000/05/09
[#2663] Re: win OLE / eRuby — Aleksi Niemel<aleksi.niemela@...>
>At Tue, 9 May 2000 09:14:51 -0400,
4 messages
2000/05/09
[#2667] The reference manual is now online — Dave Thomas <Dave@...>
6 messages
2000/05/09
[#2668] Re: The reference manual is now online — schneik@...
4 messages
2000/05/09
[#2702] Re: Append alias for Array.append? — Andrew Hunt <andy@...>
>From: Aleksi Niemel<aleksi.niemela@cinnober.com>
7 messages
2000/05/10
[#2752] RE: Array.pop and documentation [was: Append al ias for Array.append?] — Aleksi Niemel<aleksi.niemela@...>
6 messages
2000/05/11
[#2758] Re: irb install — Andrew Hunt <andy@...>
>|Excellent! Will you consider adding mod_ruby to install_app as
7 messages
2000/05/11
[#2777] Re: irb install
— "NAKAMURA, Hiroshi" <nakahiro@...>
2000/05/12
Hi,
[#2764] More code browsing questions — Albert Wagner <alwagner@...>
I see some class definitions contain "include" and "extend" statements.
6 messages
2000/05/12
[#2843] Re: editors for ruby — "Conrad Schneiker" <schneiker@...>
(Posted on comp.lang.ruby and ruby-talk ML.)
6 messages
2000/05/17
[#2874] RE: simple httpd for local use — Aleksi Niemel<aleksi.niemela@...>
> I personally use it for access to full-text indexed linux
6 messages
2000/05/18
[#2875] Re: simple httpd for local use
— hipster <hipster@...4all.nl>
2000/05/18
On Thu, 18 May 2000 09:10:28 +0200, Aleksi Niemelwrote:
[#2920] SWIG: virtual variable? — Yasushi Shoji <yashi@...>
hello,
4 messages
2000/05/22
[#2928] FYI: What our Python friends are up to. — "Conrad Schneiker" <schneiker@...>
Hi,
8 messages
2000/05/22
[#2964] Thank you — h.fulton@...
Thanks, Matz (and others) for your replies to
4 messages
2000/05/24
[#2973] Re: Socket.getnameinfo — ts <decoux@...>
>>>>> "D" == Dave Thomas <Dave@thomases.com> writes:
10 messages
2000/05/25
[#3016] rbconfig.rb — Dave Thomas <Dave@...>
5 messages
2000/05/28
[#3039] Re: Final for World Series: Python vs Ruby — "Dat Nguyen" <thucdat@...>
1 message
2000/05/30
[#3058] FailureClass? — Aleksi Niemel<aleksi.niemela@...>
Question arising from the FAQ:
7 messages
2000/05/31
[ruby-talk:02730] Re: Public/Private clarification
From:
Dave Thomas <Dave@...>
Date:
2000-05-11 05:06:19 UTC
List:
ruby-talk #2730
Albert Wagner <alwagner@tcac.net> writes:
> I have read the documentation and am now browsing sample code to learn
> more about ruby. The following code, export.rb, triggers some questions:
>
> 1) What does "public :printf" do in class Foo?
'printf' is a module function in Kernel, and the Kernel module is
included in class Object. The printf method is therefore available
throughout Ruby as either
Kernel::printf "hello\n" # module method
or
printf "hello\n" # instance method
However, printf is private, which means it must be called in
functional form (ie without a receiver). Something like
self.printf ...
would raise an error.
In class Foo, printf is made public, which means it can then be called
with an instance of Foo (or a subclass of Foo) as a receiver.
class Foo
public :printf
end
f = Foo.new
f.printf "hello\n"
> 2) I thought a module defined outside a class was, by default, attached
> to Object and was private, such as "def foobar" below. Why is a
> redefinition of class Foo required to change foobar() to public?
> Why is the "public :foobar" statement not immediatly after the def
> of foobar? Does this mean that public/private access to an given
> Object method be private in one subclass and public in another?
Maybe a different example might make it clearer.
class Base
def aMethod
puts "Got here"
end
private :aMethod
end
class Derived1 < Base
public :aMethod
end
class Derived2 < Base
end
Derived1.new.aMethod # -> Got here
Derived2.new.aMethod # -> private method `aMethod' called...
# Now change the base class
class Base
def aMethod
puts "changed"
end
end
Derived1.new.aMethod # -> changed
Derived2.new.aMethod # -> changed
If you're in class X and change the visibility of a method defined in
an ancestor class, Ruby effectively defines a proxy method in X which
calls the ancestor method. That proxy method is then given the
assigned visibility. That way, the same method can have different
visibilities in different subclasses.
Neat, eh?
Dave
--
___________________________________________________________________________
| The Pragmatic Programmers, LLC | http://www.pragmaticprogrammer.com |
| Read "The Pragmatic Programmer" | www.pragmaticprogrammer.com/ppbook/ |
---------------------------------------------------------------------------