Ruby | Clase de estructura

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

  1. == : 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
    
  2. []: 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"
    
  3. []=: 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"
    
  4. 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
    
  5. 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
    
  6. 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
    
  7. 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]
    
  8. 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
  9. 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"
    
  10. valores: este método es similar al método Struct#to_a .
    str.values
  11. 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

Deja una respuesta

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