Pergunta

Eu encontrei algumas vezes que tenho um grupo de funções inter-relacionadas, e como eu naturalmente os coloco no arquivo acaba conflitando com suas dependências (ou seja, a função 1 depende da função 2, mas está acima da função 1).Quando estou escrevendo código, geralmente continuo avaliando expressões de nível superior e apenas avaliará o arquivo inteiro para atualizar dependências no Refs ou em Whatnot.Eu estou achando isso com bastante frequência, acabo com um conflito de dependência e acabo tendo que manipular um monte de funções ao redor.

Em outros idiomas que eu conheço, assim que você declarar uma função, fica "içou" nos bastidores como se parecesse antes de qualquer outra coisa.Dessa forma, você não precisa se preocupar com a ordem das coisas em seu código e pode tratar funções como bits modulares de código.É a falta desse recurso que continua me mordendo em Clojure.Estou fazendo algo errado?É mais um incômodo menor, então um grande negócio, é algo que você só se acostuma a prestar atenção?

Foi útil?

Solução

declare solves this problem nicely

declare
macro
Usage: (declare & names)
defs the supplied var names with no bindings, useful for making forward declarations.
Added in Clojure version 1.0

you can avoid juggling the function order by adding a declare statement to the start of your namespace

(declare fun1 fun2 fun3)

(defn fun3 [] (fun1))
(defn fun1 [] (fun2))
(defn fun2 [] 42)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top