Incluir v/s Extend en Ruby

Incluir se utiliza para importar código de módulo. Ruby arrojará un error cuando intentemos acceder a los métodos del módulo de importación con la clase directamente porque se importa como una subclase para la superclase. Entonces, la única forma es acceder a él a través de la instancia de la clase.

Extend también se usa para importar código de módulo, pero los extiende para importarlos como métodos de clase. Ruby arrojará un error cuando intentemos acceder a los métodos del módulo de importación con la instancia de la clase porque el módulo se importa a la superclase al igual que la instancia del módulo extendido. Entonces, la única forma es acceder a él a través de la definición de clase.

En palabras simples, la diferencia entre incluir y extender es que ‘incluir’ es para agregar métodos solo a una instancia de una clase y ‘extender’ es para agregar métodos a la clase pero no a su instancia.

Ejemplo :

# Ruby program of Include and Extend
  
# Creating a module contains a method
module Geek
  def geeks
    puts 'GeeksforGeeks!'
  end
end
   
class Lord
  
  # only can access geek methods
  # with the instance of the class.
  include Geek
end
   
class Star
    
  # only can access geek methods
  # with the class definition.
  extend Geek
end
   
# object access 
Lord.new.geeks
  
# class access
Star.geeks 
  
# NoMethodError: undefined  method
# `geeks' for Lord:Class
Lord.geeks 

Producción

GeeksforGeeks!
GeeksforGeeks!
main.rb:20:in `': undefined method `geeks' for Lord:Class (NoMethodError)

Si queremos importar métodos de instancia en una clase y sus métodos de clase también. Podemos ‘incluir’ y ‘extender’ al mismo tiempo.
Ejemplo :

# Ruby program to understand include and extend
  
# Creating a module contains a method
module Geek
  def prints(x)
    puts x
  end
end
   
class GFG
  
  # by using both include and extend
  # we can access them by both instances
  #  and class name.
  include Geek
  extend Geek
end
  
# access the prints() in Geek
# module by include in Lord class
GFG.new.prints("Howdy") # object access
   
# access the prints() in Geek 
# module by extend it in Lord class
GFG.prints("GeeksforGeeks!!") # class access

Producción

Howdy
GeeksforGeeks!!

Publicación traducida automáticamente

Artículo escrito por Tejashwi5 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *