extender en Ruby
Hacer referencia de clase a clase y de función a función es una tarea común en la Programación Orientada a Objetos. Si está buscando una forma de importar módulos de diferentes clases, este artículo puede ayudarlo.
En Ruby, puede hacer esto de dos maneras diferentes. Mediante el uso de incluir
o extender
.
En este artículo, hablaremos sobre “incluir” y “extender” en Ruby y veremos un ejemplo relevante para facilitar el tema.
¿Qué es incluir
en Ruby?
include
te permite importar un módulo de código. Si intenta obtener un método para importar el módulo a través de la clase directamente, recibirá un error ya que se importa como una subclase para la superclase.
La solución aquí es obtenerlo por instancia de la clase. Puede usar incluir
usando la palabra clave include
.
¿Qué es extender
en Ruby?
Otra forma de importar un módulo es usando la palabra clave extender
. A través de extender
, puede importar un método como método de clase.
Pero si intenta obtener un método de un módulo importado a través de la instancia, obtendrá un error. Debe obtener ese método por la definición de clase para evitar este error.
Usar incluir
y extender
en Ruby
En nuestro ejemplo a continuación, ilustraremos el uso de las palabras clave incluir
y extender
en Ruby. Echa un vistazo al siguiente código de ejemplo.
module MyModule
def MyMethod
puts 'DelftStack is nice.'
end
end
class ClassA
# only can access MyModule methods
# By the instance.
include MyModule
end
class ClassB
# only can access MyModule methods
# By the class definition.
extend MyModule
end
# Access from the object
ClassA.new.MyMethod
# Acess from class
ClassB.MyMethod
Se comenta el propósito de cada línea y se analiza el mecanismo de funcionamiento de las palabras clave incluir
y extender
. Cuando ejecute el código de ejemplo anterior, obtendrá el siguiente resultado.
DelftStack is nice.
DelftStack is nice.
Ahora, si intenta acceder al método directamente desde la clase como se muestra a continuación:
ClassA.MyMethod
Recibirá el siguiente error:
# NoMethodError: undefined method
# `MyMethod' for ClassA:Class
Esto se debe a que ClassA
incluye el módulo usando la palabra clave include
e include
no le permite llamar a un método directamente desde la clase.
Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.
LinkedIn