我是克洛尔的乞丐,当时我正在读一本包含这个功能的书:
(defn illustrative-function [] (+ 1 304) 30 "joe")如果不带参数地调用该函数,它只返回"joe",如您所见:
(illustrative-function )
=> "joe"我的问题是:
为什么函数中的数字没有打印? 305和30?即使我使用和参数(和参数),它也不会返回任何内容:
(defn illustrative-function [x] x (+ 1 304) 30 "joe")
=> #'dev-projects.core/illustrative-function
(illustrative-function 3)
=> "joe"
(illustrative-function [3])
=> "joe"有人能解释一下为什么会发生这种事吗?
为什么没有打印整数和参数?
谢谢!
发布于 2020-12-12 10:56:48
defn的主体被包装在do中。do允许您执行多个指令,通常是针对副作用的.do中的最后一条语句是返回。这个看起来是这样的:
(defn illustrative-function
[]
(do
(+ 1 304) ; no-op
30 ; no-op
"joe")) ; return(+ 1 304)被读取和计算,然后抛出。30只会被阅读和丢弃。然后,"joe"是do的返回,然后是函数的返回。
如果您想要“打印”一些东西,您必须显式地print它。例如,将30替换为(println 30)。还请注意,在REPL中,返回值被打印到REPL中--如果您从其他地方调用该函数,则除非显式打印,否则不会打印任何内容。
https://stackoverflow.com/questions/65263813
复制相似问题