Struct es una forma compacta de agrupar una serie de atributos, utilizando métodos de acceso, sin crear una clase explícita. La clase Struct es un creador de clases específicas, cada una está definida para contener un conjunto de variables y sus accesores. La subclase de la clase Struct es Struct::Tms .
Ejemplo:
# Ruby program to illustrate # use of Struct # creating Struct # Geek is generated class Geek = Struct.new(:tut_name, :cate_name) do def gfg "This is #{cate_name} class tutorial in #{tut_name}." end end # creating object of struct a = Geek.new("Ruby", "Struct") puts a.gfg
Producción:
This is Struct class tutorial in Ruby.
Método de clase
new : este método crea una nueva clase nombrada por string, que consta de métodos de acceso para los símbolos dados. Si se omite la string de nombre, se creará la clase de estructura anónima. De lo contrario, el nombre de esta estructura aparecerá como una constante en la clase Struct, por lo que el nombre debe ser único entre todas las estructuras del sistema y debe comenzar con letras mayúsculas. Cuando se asigna una clase estructurada a la constante, efectivamente le da a la clase el nombre de la constante.
Struct.new([string][, symbol]) Struct.new([string][, symbol]){block}
Ejemplo:
# Ruby program to illustrate # creating structure # Creating a structure with a name in struct Struct.new("Geek", :tutorial_name, :topic_name) Struct::Geek.new("ruby", "Struct") # Create a structure named by its constant Geek = Struct.new(:tutorial_name, :topic_name) p Geek.new("Ruby", "Struct")
Producción:
#<struct Geek tutorial_name="Ruby", topic_name="Struct">
La clase Struct.new devuelve un nuevo objeto de clase, que se utiliza para crear una instancia específica de la nueva estructura. En este caso, el parámetro real es menor o igual que el número de atributos definidos para esta clase. El valor predeterminado de los parámetros no establecidos es nil . Pasar demasiados parámetros generará una excepción ArgumentError .
Geek.new([obj])
Ejemplo:
# Ruby program to illustrate # creating objects of structure # Create structure Geek = Struct.new(:tutorial_name, :topic_name) # Creating objects str = Geek.new("Ruby", "Struct") p str.tutorial_name p str.topic_name
Producción:
"Ruby" "Struct"
Método de instancia
- == : Se le conoce como Igualdad . Devuelve verdadero si str es igual a otra_estructura en términos de los valores de las variables de instancia. Y también deben ser de la misma clase que los creados por Struct.new . De lo contrario, devuelve falso.
str == other_struct
Ejemplo:
# Ruby program to illustrate
# check equality
# Create structure
Geek = Struct.
new
(
:tutorial_name
,
:topic_name
)
# Creating objects
str = Geek.
new
(
"Ruby"
,
"Struct"
)
other_struct = Geek.
new
(
"Java"
,
"array"
)
str1 = Geek.
new
(
"Ruby"
,
"Struct"
)
# Check equality
p str == other_struct
p str == str1
Producción:
false true
- []: Se le conoce como Referencia de Atributo . Devuelve el valor de la variable de instancia nombrada por símbolo o índice (0..longitud-1) por int. Si la variable nombrada no existe, genera NameError y si el índice está fuera de rango, genera IndexError .
str[symbol] str[int]
Ejemplo:
# Ruby program to illustrate
# use of []
# Create structure
Geek = Struct.
new
(
:tutorial_name
,
:topic_name
)
# Creating objects
str = Geek.
new
(
"Ruby"
,
"Struct"
)
# Using []
p str[
:tutorial_name
]
p str[
"topic_name"
]
Producción:
"Ruby" "Struct"
- []=: Se le conoce como Asignación de Atributos . Se utiliza para asignar el nombre de la variable de instancia con un símbolo o el valor de obj por int y devolverlo. Si el nombre de la variable de instancia no existe o si el índice está fuera de rango, genera NameError .
str[symbol] = obj str[int] = obj
Ejemplo:
# Ruby program to illustrate
# use of []=
# Create structure
Geek = Struct.
new
(
:tutorial_name
,
:topic_name
)
# Creating objects
str = Geek.
new
(
"Ruby"
,
"Struct"
)
# Using []=
str[
:tutorial_name
]=
"Java"
str[
:topic_name
]=
"array"
p str.tutorial_name
p str.topic_name
Producción:
"Java" "array"
- each : este método llama al bloque para cada variable de instancia y pasa el valor como parámetro.
str.each_pair{|obj| block}
Ejemplo:
# Ruby program to illustrate
# use of each method
# Create structure
Geek = Struct.
new
(
:tutorial_name
,
:topic_name
)
# Creating objects
str = Geek.
new
(
"Ruby"
,
"Struct"
)
# Using each method
str.
each
{|a| puts (a)}
Producción:
Ruby Struct
- each_pair: este método llama al bloque para cada variable de instancia y pasa el nombre y el valor como parámetro.
str.each_pair{|symbol, obj| block}
Ejemplo:
# Ruby program to illustrate
# use of each_pair method
# Create structure
Geek = Struct.
new
(
:tutorial_name
,
:topic_name
)
# Creating objects
str = Geek.
new
(
"Ruby"
,
"Struct"
)
# Using each_pair method
str.each_pair{|tutorial_name, a| puts (
"#{tutorial_name} => #{a}"
)}
Producción:
tutorial_name => Ruby topic_name => Struct
- length : este método devuelve el número de variables de instancia. El tipo de retorno de este método es un número entero.
str.length
Ejemplo:
# Ruby program to illustrate
# use of length method
# Create structure
Geek = Struct.
new
(
:tutorial_name
,
:topic_name
)
# Creating objects
str = Geek.
new
(
"Ruby"
,
"Struct"
)
# Using the length method
p str.length
Producción:
2
- miembros: este método devuelve una array de strings que representan el nombre de la variable de instancia.
str.members
Ejemplo:
# Ruby program to illustrate
# use of members
# Create structure
Geek = Struct.
new
(
:tutorial_name
,
:topic_name
)
# Creating objects
str = Geek.
new
(
"Ruby"
,
"Struct"
)
# Using members method
p str.members
Producción:
[:tutorial_name, :topic_name]
- tamaño: este método es similar al método Struct#length . El tipo de retorno de este método es un número entero.
str.size
- to_a : este método devuelve los valores de esta instancia como una array.
str.to_a
Ejemplo:
# Ruby program to illustrate
# use of to_a method
# Create structure
Geek = Struct.
new
(
:tutorial_name
,
:topic_name
)
# Creating objects
str = Geek.
new
(
"Ruby"
,
"Struct"
)
# Using to_a method
p str.to_a[
0
]
p str.to_a[
1
]
Producción:
"Ruby" "Struct"
- valores: este método es similar al método Struct#to_a .
str.values
- valores_at: este método devuelve una array que consiste en el elemento en str correspondiente a los índices dados. Los selectores pueden ser índices enteros o rango.
str.values_at([selector])
Ejemplo:
# Ruby program to illustrate
# use of value_at method
# Create structure
Geek = Struct.
new
(
:p
,
:q
,
:r
,
:s
)
# Creating objects
str = Geek.
new
(
12
,
13
,
14
,
15
)
# Using values_at method
p str.values_at(
2
,
1
)
p str.values_at(
2
,
1
,
0
,
3
)
Producción:
Geek [14, 13] [14, 13, 12, 15]
Referencia: https://ruby-doc.org/core-2.2.0/Struct.html
Publicación traducida automáticamente
Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA