Quando você digita “Olá, mundo” em Clojure REPL, por que dizer 'nulo'?

StackOverflow https://stackoverflow.com/questions/1416067

  •  06-07-2019
  •  | 
  •  

Pergunta

Eu digitei isso em Clojure REPL (usando o Netbeans enclojure plugin):

user=> "hello, world"
"hello, world"
nil

Qual é a nil sobre?

Foi útil?

Solução

Cada função ou macro chamada retorna um valor em Clojure, as coisas até mesmo como declarações if ou construções de loop ou definições de funções toplevel ou imprimir declarações, que em outros idiomas são "declarações". Não há nenhuma declaração / dicotomia expressão em Lisps; tudo é uma expressão.

Assim println e amigos imprimir o padrão-saída como um efeito colateral e nil retorno, como fazem a maioria das funções que não têm nada de útil para retornar.

Mas digitando uma string literal no REPL deve retornar a string em si, como em digitalross' post.

user> (println "hello world")
hello world
nil
user> "hello world"
"hello world"
user>

No primeiro caso, a linha hello world é o que foi impresso o padrão de saída de pelo println. nil é o valor retornado de println. No segundo caso, "hello world" é o valor retornado de "hello world" desde uma string é avaliada como própria. Nada é impresso para-saída padrão neste caso.

(lodo e algumas outras interfaces REPL vai padrão da saída prestativamente cor (a linha hello world acima) de forma diferente do valor retornado do que você digitou no REPL (nil acima), uma vez que pode ser confuso contrário.)

Isto é o que você deve ver em um REPL. O que você postou deve ser um artefato de Enclojure.

Outras dicas

Não é possível reproduzir ...

Ele não faz isso por mim em Clojure 1.0.0 -

$ java -cp clo*.jar clojure.lang.Repl
Clojure 1.0.0-
user=> "hello, world"
"hello, world"
user=> 

Existem alguns erros recentes relacionados com a interpretação final CRLF da seqüência de linha como duas expressões diferentes no Windows. O valor de retorno de uma corda em Clojure deve ser a seqüência de seu self.

Eu acho que é o valor de retorno de sua expressão. É o caso do rubi com o método puts.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top