欢迎!请查看关于页面,了解更多信息。
我打开一个文件,输入(map prn (range 2)),然后保存文件并执行clojure file.clj。这没有产生输出。然后我执行clojure并输入(map prn (range 2))。这产生了输出。
clojure是否有某种“特性”,当你在文件上运行时,如果结果未被使用则丢失for和map中的代码?如果是这样,它应该给出错误或至少警告你正在丢弃死代码。
根据文档(https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/map),map 返回一个惰性序列,这意味着工作(特别是 prn 的调用)将不会发生,直到该序列被消费。正如 Eugene Pakhomov 在另一个答案中指出的那样,REPL 会消费序列,但文件中的形式本身并未做到这一点。
因为 map 返回一个惰性序列,所以通常不依赖于 map 实现像打印这样的副作用。doseq 很适合执行副作用。除此之外,你通常需要 要么 数据(序列)要么 边界效应,所以 doseq 不积累序列是很方便的。
我给你更好的一条——如果你只在该文件中输入 1 或其他任何字面量,单独执行它不会产生任何结果。
1
REPL 中的 P 代表 "print" - 它为您打印所有结果。执行文件本身不会打印任何内容,除非你使用了某些打印函数。