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) #=> #<Method: Class(Kernel)#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() #=> #<Thing:0x007f8af4a96ec0> <- Kernel#Thing
Kernel.Thing() #=> #<Thing:0x007fc111238280> <- Kernel::Thing
class Dog
def initialize(name)
@name = name
end
def greet
puts 'hello'
end
end
def Dog(x)
Dog.new(x) #Create a new instance of the Dog class and return it.
end
d = Dog("Rover")
d.greet
--output:--
hello