1

How come I can say

Math.sqrt(4)

or

Math::sqrt(4)

but I can't say

Math.PI

in ruby

What is the difference between what the dot operator is doing and the colon operator in this case?

ordinary
  • 5,943
  • 14
  • 43
  • 60

1 Answers1

7

. is message passing operator and :: is scope resolution operator in Ruby. see the below example:

module Foo
 X = 12
 def self.bar
   p "hi"
 end
end
Foo::bar # => "hi"
Foo.bar  # => "hi"
Foo::X # => 12
Foo.X
# undefined method `X' for Foo:Module (NoMethodError)

In Ruby you can call class or module methods(which can be called by the class/module name itself) like bar using the . and :: also. But the constants like X should need to be called using ::,but . is not allowed.In your case sqrt is a class method of the module Math,whereas PI is a constant of the module Math.

Arup Rakshit
  • 116,827
  • 30
  • 260
  • 317