From: Stefano Crocco Date: 2007-02-16T19:26:25+09:00 Subject: Re: Ruby Syntax - One::Two Alle venerd� 16 febbraio 2007, toulax@gmail.com ha scritto: > I'm a newcomer to ruby and there's this little something I don't > really understand: > > class One::Two > ... > end > > Class One::Three > ... > end > > On this example, what does "::" mean? If understand correctly it's > just sort of a naming convention to imply that both the Two and Three > classes belong to the same "group", as in Net::HTTP and Net::FTP. > So, in essence Two and Three are completely unrelated, and I'd not > even need to have a class named One for it to work, is that right? > > If not, please tell me, what exactly is the purpose of "::" on class > names? > > Thanks :: is the scope operator. It is used to access constants defined in a class or module. Since classes are constants, when you write class One::Two, you're defining the class Two inside One (where One can be a class or a module). If you didn't define One, the code class One::Two will give you a NameError, telling you that the constant One is not initialized: >> class One::Two >> end NameError: uninitialized constant One from (irb):1 >> Another example of the use of :: is puts Math::PI, which prints the value of the PI constant >> puts Math::PI 3.14159265358979 Since PI belongs to the Math module, I couldn't have written puts PI. In fact, this raises an exception: >> puts PI NameError: uninitialized constant PI from (irb):5 I hope this helps. Stefano