user=> (defn make-list [] '(1 2 3))
#'user/make-list
user=> (defn get-list [] (map #(str "foo" % ) make-list))
#'user/get-list
user=> (get-list)
IllegalArgumentException Don't know how to create ISeq from: user$make-list clojure.lang.RT.seqFrom (RT.java:505)
user=> (defn get-list [] (let [ml (make-list)] (map #(str "foo" % ) ml) ))
#'user/get-list
user=> (get-list)
("foo1" "foo2" "foo3")
为什么defn中的值不能以与LET子句相同的方式从函数体中访问?
defn
声明一个函数,因此需要调用它才能得到结果:
(defn make-list [] '(1 2 3))
(defn get-list [] (map #(str "foo" % ) (make-list)))
(get-list)
;; ("foo1" "foo2" "foo3")
但是由于您的makeList
函数只返回一个列表,所以您可以使用def
,因为它只是声明了一个变量:
(def make-list '(1 2 3))
(defn get-list [] (map #(str "foo" % ) make-list))
(get-list)
;;("foo1" "foo2" "foo3")
最后,在Clojure中使用kebab case而不是camelCase作为函数和变量名。这是惯例,除非你在声明协议或类型。
问题内容: node.js是否支持let语句,类似于MDN上描述的内容?? 如果没有,是否可以通过自执行匿名功能或其他方式复制功能? 和/或还有另一个js环境 有和 像节点一样具有REPL?犀牛? 编辑 : 这个问题是很久以前问过的。截至2015年末,答案是“是的,是的”。io.js 3.3中默认包含Harmony功能,并且最近已在4.x版本中将其恢复到node.js。 问题答案: 我不认为Nod
return语句用来从一个函数 返回 即跳出函数。我们也可选从函数 返回一个值 。 使用字面意义上的语句 例7.7 使用字面意义上的语句 #!/usr/bin/python # Filename: func_return.py defmaximum(x, y): ifx > y: returnx else: returny printmaximum(
问题内容: 我要从字典中解开两个值,在使用它们之前,我必须将它们强制转换并测试正确的类型。这是我想出的: 但是我想将两个查询打包在一起。这样就可以了: 该语法不起作用,所以我想知道是否有一种漂亮的方法可以做到这一点。 问题答案: Swift 3更新: 以下内容将在Swift 3中运行: 请务必记住,如果尝试的可选绑定之一失败,则不会执行该块内的代码。 注意:这些子句不必全部都是’let’子句,您可
问题内容: 函数声明如何处理? 此示例在Chrome和Firefox中产生不同的输出。Chrome输出,而FF输出。 问题答案: 当问这个问题时,ECMAScript5(ES5)盛行。在ES5的严格模式下,函数声明不能嵌套在一个块中,如问题所示。在非严格模式下,结果是不可预测的。不同的浏览器和引擎针对如何处理块内的函数声明实现了自己的规则。 许多浏览器都支持ECMAScript2015(ES2
我试图在一个保护语句中调用一个名为“nextPage”的函数,但它说“()”不能转换为“Bool”。要调用此函数,我需要做什么
问题内容: 在PostgreSQL 9.1中,PL / pgSQL给出了一个查询: 其中的类型(例如“ table_name”)。 如何获得“ relname”的适当值,该值可直接在语句中用作: 在PL / pgSQL脚本中? 使用如: 失败与: “(”或附近的语法错误LINE 55:UPDATE quote_ident(r.relname)…。 我正在使用的完整代码: 我敢肯定这种事情经常发生,