如果我有一个字符串列表:
("String 1" "String 2" "String 3")
或字符串向量:
["String 1" "String 2" "String 3"]
穿过(map println)线程产生这个(对于列表):
(String 1
String 2
nil String 3
nil nil)
这适用于矢量:
(String 1
String 2
String 3
nil nil nil)
这里发生了什么?尼尔斯来自哪里?我怎么得到这个?:
String 1
String 2
String 3
(没有,没有括号,只是新行。)
答案 0 :(得分:4)
每次致电nil
时,println
都会返回。
(map println ["String 1" "String 2" "String 3"])
是
(nil nil nil)
打印字符串是一种副作用。
尝试
(dorun (map println ["String 1" "String 2" "String 3"]))
给出了
String 1
String 2
String 3
nil
如您所见,nil
还会返回一个dorun
。
答案 1 :(得分:0)
如果你想要打印的东西
String 1
String 2
String 3
在REPL中,当提供输入["String 1" "String 2" "String 3"]
时,不打印任何parens或nil
结果:
user> (symbol (clojure.string/join \newline ["String 1" "String 2" "String 3"]))
String 1
String 2
String 3
这是一个愚蠢的Clojure技巧,具有边际效用。它可以准确输出您想要的内容,但如果您不想要返回值,为什么还要使用REPL呢?为什么不编写一个正确的-main
函数来解析用户输入并准确输出你喜欢的内容?