What is Ruby's double-colon `::`? What is Ruby's double-colon `::`? ruby ruby

What is Ruby's double-colon `::`?


:: is basically a namespace resolution operator. It allows you to access items in modules, or class-level items in classes. For example, say you had this setup:

module SomeModule    module InnerModule        class MyClass            CONSTANT = 4        end    endend

You could access CONSTANT from outside the module as SomeModule::InnerModule::MyClass::CONSTANT.

It doesn't affect instance methods defined on a class, since you access those with a different syntax (the dot .).

Relevant note: If you want to go back to the top-level namespace, do this: ::SomeModule – Benjamin Oakes


This simple example illustrates it:

MR_COUNT = 0        # constant defined on main Object classmodule Foo  MR_COUNT = 0  ::MR_COUNT = 1    # set global count to 1  MR_COUNT = 2      # set local count to 2endputs MR_COUNT       # this is the global constant: 1puts Foo::MR_COUNT  # this is the local constant: 2

Taken from http://www.tutorialspoint.com/ruby/ruby_operators.htm


:: Lets you access a constant, module, or class defined inside another class or module. It is used to provide namespaces so that method and class names don't conflict with other classes by different authors.

When you see ActiveRecord::Base in Rails it means that Rails has something like

module ActiveRecord  class Base  endend

i.e. a class called Base inside a module ActiveRecord which is then referenced as ActiveRecord::Base (you can find this in the Rails source in activerecord-n.n.n/lib/active_record/base.rb)

A common use of :: is to access constants defined in modules e.g.

module Math  PI = 3.141 # ...endputs Math::PI

The :: operator does not allow you to bypass visibility of methods marked private or protected.