We have discussed an introduction to the Classes in Ruby in my previous Article “Ruby Programming – An Overview on Classes“. There we have seen defining classes and creating objects to the classes using the class’s new method. And also discussed that the classes have instance methods and class methods.
There are different ways we can create class methods in Ruby. We will discuss them through this Article.
Creating class methods using class Name
Class methods in Ruby can be created by prefixing the method name with the class name and the dot operator. For example, to define a class method “PrintMe” for a class “Sample”; the syntax looks like below;
def Sample.PrintMe # method definition here end
Using self keyword to create class methods
Another way of creating a class method in Ruby is by prefixing the method name with self keyword and the dot operator. For example, to create a “PrintMe_2” class method for the “Sample” class; the syntax looks like below;
def self.PrintMe_2 # definition of the method goes here end
class << self syntax to create class methods
If you want to create multiple class methods; instead of prefixing the method name either by class name or self keyword with dot operators; you can use class << self syntax to group all the class methods in one place. Inside this group; you can define the methods as normal way; like instance method declarations. Here is the example, where all the class methods can be grouped using this syntax;
class << self
def PrintMe_3
# method definition
end
def PrintMe_4
# method definition
end
endNote that, you can call class methods using class names only; not through class instances or objects.
Finally, putting altogether; here is the working example.
class Sample
def Sample.PrintMe
puts "class method creation using class name."
end
def self.PrintMe_2
puts "class method creation using self keyword"
end
class << self
def PrintMe_3
puts "class methods using class << self syntax"
end
def PrintMe_4
puts "class methods using class << self syntax"
end
end
end
Sample.PrintMe
Sample.PrintMe_2
Sample.PrintMe_3
Sample.PrintMe_4| Nick |