Clojure Repl에 "Hello, World"를 입력하면 왜 'Nil'이라고 말합니까?

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

  •  06-07-2019
  •  | 
  •  

문제

나는 이것을 Clojure Repl에 입력했다 (Enclojure netbeans 플러그인 사용) :

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

Nil은 무엇입니까?

도움이 되었습니까?

해결책

모든 기능 또는 매크로 호출은 Clojure에서 값을 반환합니다. if 다른 언어로 "진술"인 진술 또는 루핑 구성 또는 조정 기능 정의 또는 인쇄 문. LISP에는 진술/표현 이분법이 없습니다. 모든 것이 표현입니다.

그래서 println 그리고 친구는 부작용으로 표준 출력으로 인쇄하고 반환 nil, 반품에 유용한 것이없는 대부분의 기능과 마찬가지로.

그러나 REPL에 문자 그대로 문자열을 입력하면 문자열 자체를 반환해야합니다. DigitalRoss ' 게시하다.

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

첫 번째 경우 hello world 라인은 표준 출력에 인쇄 된 것입니다 println. nil 반환 된 값입니다 println. 두 번째 경우, "hello world" 반환 된 값입니다 "hello world" 문자열이 스스로 평가되므로. 이 경우 표준 출력에 인쇄되지 않은 것은 없습니다.

(점액 및 기타 대체 인터페이스는 표준 출력을 색상으로 hello world 위의 줄)은 REPL에서 입력 한 반환 된 값과 다르게 (nil 위), 다른 방법으로 혼란 스러울 수 있습니다.)

이것이 당신이 대체에서 볼 수있는 것입니다. 당신이 게시 한 것은 enclojure의 인공물이어야합니다.

다른 팁

재현 할 수 없습니다 ...

Clojure 1.0.0에서 나를 위해 그렇게하지 않습니다.

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

CRLF 라인 시퀀스를 Windows에서 두 가지 다른 표현으로 해석하는 것과 관련된 최근 버그가 있습니다. Clojure에서 문자열의 반환 값은 자체 문자열이어야합니다.

나는 그것이 당신의 표현의 반환 가치라고 생각합니다. Ruby의 경우 Puts Method가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top