1
resposta

Dúvidas sobre falta de parâmetro

No fonte:

(defn starta-thread-de-chegada
    ([hospital]
    (fn [pessoa] (starta-thread-de-chegada hospital pessoa)))
    ([hospital pessoa]
    (.start (Thread. (fn [] (chega-sem-malvado! hospital pessoa))))))

(defn simula-um-dia-em-paralelo-com-mapv-extraida
    []
    (let [hospital (atom (h.model/novo-hospital))
        pessoas ["111", "222", "333", "444", "555", "666"]]

        (mapv (starta-thread-de-chegada hospital) pessoas)

        (.start (Thread. (fn [] (Thread/sleep 8000)
                                (pprint hospital))))))

(simula-um-dia-em-paralelo-com-mapv-extraida)

Não compreendi de onde vem o parâmetro pessoa na primeira variação da função starta-thread-de-chegada (com aridade 1). Entendi que é uma high order function (starta-thread-de-chegada) que retorna uma função, porém o parametro pessoa dentro da função (fn [pessoa]) realmente eu não estou conseguindo entender, de onde vem pois o unico parâmetro recebido foi [hospital].

Estou perdido! rsrs

1 resposta

Olá , pelo que eu entendi funciona da seguinte forma:

A função de aridade 1 e o que ela faz é retornar uma função anônima que não vai ser executada no momento. Essa função anônima so vai ser executada quando eu passar o parâmetro pessoa para ela . E o que a função anônima faz ? Ela simplesmente chama a função starta-thread-de-chegada agora com os dois parâmetros que vai executar todo o código esperado.

A função de aridade 1 serve somente para preparar a função de aridade 2.

Espero que tenha ajudado.

Sucesso !