No explicaré mucho sobre la marcha, dejando la mayor parte hasta el final.
Estoy tratando de ver la forma de lanzar un mapa en contexto de sumidero.
Agregar --> Nil
como valor de retorno del bloque hace eso:
(1..3).map: -> $_ --> Nil { Sunk.new( :titanic($_) ) }
El for
bucle efectivamente hunde todo lo creado, el map
no.
Por defecto, los bloques se ejecutan con:
Todas las declaraciones excepto la última en contexto de sumidero.
La última declaración no en contexto de sumidero. (La última declaración es el valor de retorno del bloque, por lo que se presume que es inapropiado arrojarlo al fregadero).
Su código no alteró este valor predeterminado para su map
llamada, por lo que la última instrucción del bloque, su única instrucción, no estaba en contexto de sumidero. (Agregar --> Nil
a la firma del bloque vuelve a colocar la última declaración en el contexto del receptor).
Las excepciones a este esquema predeterminado implican algún tipo de palabra clave de declaración. for
es uno de estos: pone su declaración, o la última declaración en su bloque, en contexto de sumidero. (Para deshacer eso, de modo que la última declaración no esté en contexto de hundimiento, puede escribir algo como $ = do for ...
).
Se supone que esta prueba en asado funciona como una prueba para eso. Y map
está efectivamente en un contexto de hundimiento, pero no veo cómo se "ejecuta como hundido". Simplemente se ejecuta.
Estoy confundido por el boleto correspondiente y la prueba. Entonces, lo siento, no puedo ayudar en eso.
Investigué durante horas preparando esta respuesta. Algunas de las piezas que encontré y en las que confié para seguir, junto con breves notas mías.
Muchos de los siguientes enlaces van a líneas particulares de registros de IRC. Mi intención para la mayoría de ellos es que leas un poco del diálogo que sigue a cada línea para maximizar lo que obtienes de ella (incluso si es confusión, porque creo que incluso eso podría ser útil, como explicaré a continuación).
Considere leer al menos los resúmenes a continuación y haga clic en algunos de los enlaces, y luego publique comentarios debajo de esta respuesta para provocar más discusión aquí para ver si podemos avanzar hacia la claridad.