Parámetros de bloque
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 18 de 56.
Las variables entre las barras, |x|, |x, y|, son los parámetros de bloque. Nombran los valores que el método pasa al bloque.
Algunos métodos pasan un valor, otros pasan varios. each pasa un elemento a la vez:
[10, 20, 30].each { |n| puts n }each_with_index pasa dos, el elemento y su índice:
["a", "b", "c"].each_with_index do |letter, i|
puts "#{i}: #{letter}"
end
# 0: a
# 1: b
# 2: cAl iterar un hash, los parámetros del bloque son la clave y el valor:
{ a: 1, b: 2 }.each do |key, value|
puts "#{key} = #{value}"
endEl número y el orden de los parámetros de bloque dependen de lo que el método genere (yields). En caso de duda, consulta la documentación o prueba con un parámetro y mira qué obtienes.
Desafío
FácilSe proporciona el hash scores. Iteralo con each_with_index en su forma to_a para que tengas acceso tanto al par (name, points) como a su posición. Imprime una línea por entrada en este formato:
<rank>. <name> - <points>Donde rank comienza en 1 (no 0).
Para el hash por defecto, la salida es:
1. Alice - 90
2. Bob - 85
3. Cara - 78Hoja de referencia
Los parámetros de bloque se nombran entre barras verticales |...| y reciben los valores cedidos por el método:
# each – un parámetro
[10, 20, 30].each { |n| puts n }
# each_with_index – elemento e índice
["a", "b", "c"].each_with_index do |letter, i|
puts "#{i}: #{letter}"
end
# hash each – clave y valor
{ a: 1, b: 2 }.each do |key, value|
puts "#{key} = #{value}"
endhash.to_a convierte un hash en un array de pares [key, value], lo cual es útil con each_with_index:
{ a: 1, b: 2 }.to_a.each_with_index do |(key, value), i|
puts "#{i}: #{key} = #{value}"
endPruébalo tú mismo
scores = { "Alice" => 90, "Bob" => 85, "Cara" => 78 }
# TODO: imprimir "<rank>. <name> - <points>" para cada entrada, el rango comienza en 1
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Strings en profundidad
Visión general de los métodos de StringInterpolación de StringsIterar sobre StringsSplit y JoinRepaso - String Weaver4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end vs llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasResumen - Iterador personalizado7Hashes Parte 2
Hash.new con valores por defectoIteración de HashesHashes anidadosFusión y transformaciónResumen - Contador de frecuencia10Proyecto - Registros de Estudiantes
Descripción general del proyectoAgregar estudiante5Potencia de Enumerable
Select y RejectEncadenando MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byResumen - Data Pipeline