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?
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:
I understand now, I didn't realize "class One::Two" actually defined
the constant Two inside One.
Thank you!
···
On Feb 16, 8:26 am, Stefano Crocco <stefano.cro...@alice.it> wrote:
Alle venerdì 16 febbraio 2007, tou...@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: