Não vou explicar muito, deixando a maior parte até o fim.
Estou tentando ver a maneira de jogar um mapa no contexto do coletor.
Adicionar --> Nil
como valor de retorno do bloco faz isso:
(1..3).map: -> $_ --> Nil { Sunk.new( :titanic($_) ) }
O for
loop efetivamente afunda todo o criado, o map
não.
Por padrão, os blocos são executados com:
Todas as declarações, exceto a última no contexto do coletor.
A última declaração não está no contexto do coletor. (A última instrução é o valor de retorno do bloco, portanto, presume-se inapropriado jogá-lo na pia.)
Seu código não alterou esse padrão para sua map
chamada, portanto, a última declaração do bloco - a única declaração - não estava no contexto do coletor. (Adicionar --> Nil
à assinatura do bloco coloca a última instrução de volta no contexto do coletor.)
Exceções a esse esquema padrão envolvem algum tipo de palavra-chave de instrução. for
é um desses - coloca sua declaração, ou a última declaração em seu bloco, no contexto do coletor. (Para desfazer isso, para que a última declaração não esteja no contexto do coletor, você pode escrever algo parecido $ = do for ...
.)
Este teste no assado deve funcionar como um teste para isso. E map
está efetivamente em um contexto de afundamento, mas não vejo como é "executado como afundado". É simplesmente correr.
Estou confuso com o ticket correspondente e o teste. Então, desculpe, eu não posso ajudar nisso.
Eu fiz horas de pesquisa na preparação desta resposta. Seguem-se algumas das peças que encontrei e nas quais confiei, além de breves anotações minhas.
Muitos dos links a seguir vão para linhas específicas de logs do IRC. Minha intenção para a maioria delas é que você leia um pouco do diálogo que segue cada linha para maximizar o que obtém (mesmo que seja confusão, porque acho que isso pode ser útil, como explicarei a seguir).
Por favor, considere ler pelo menos os resumos abaixo e clicar em alguns dos links e, em seguida, poste comentários nesta resposta para provocar uma discussão mais aprofundada aqui para ver se podemos avançar em direção à clareza.