Complex
is a built-in class. To make a Complex
object, I write:
Complex(10, 5)
But if I create my own class
Complex
can refer to either the Complex class, or to the Complex method defined in Kernel:
Object.const_get(:Complex) #=> Complex
Object.method(:Complex) #=> #
The latter is called a global method (or global function). Ruby defines these methods in Kernel as both, private instance methods:
Kernel.private_instance_methods.grep /^[A-Z]/
#=> [:Integer, :Float, :String, :Array, :Hash, :Rational, :Complex]
and singleton methods:
Kernel.singleton_methods.grep /^[A-Z]/
#=> [:Integer, :Float, :String, :Array, :Hash, :Rational, :Complex]
Just like any other method in Kernel:
These methods are called without a receiver and thus can be called in functional form
You can use module_function to add your own global method to Kernel
:
class Thing
end
module Kernel
module_function
def Thing
Thing.new
end
end
Thing #=> Thing <- Thing class
Thing() #=> # <- Kernel#Thing
Kernel.Thing() #=> # <- Kernel::Thing