作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个函数可以生成方板上的坐标向量。运行此函数的结果的形式为
[{:x 1, :y 0} {:x 0, :y 1} {:x 2, y:3} {:x 3, :y 4}]
运行此函数后,我需要对上面的结果应用另一个函数。由于我要在集合上映射函数,因此我认为使用 map 函数是合适的。因此,我编写了以下方法:
(defn attack [x y] (map (fn [coord] (println (get coord :x))) [{:x 1, :y 0} {:x 0, :y 1}]))
(我也尝试过上面的例子,用 get-in 而不是 get,但没有成功)
这不是该方法的最终形式,而只是我尝试查看运行后是否至少可以看到打印到终端的内容
clojure myscript.clj
但是,它没有产生任何结果,并且我是否从 fn 函数返回值似乎并不重要。例如这个
(defn attack [x y] (map (fn [coord] coord) [{:x 1, :y 0} {:x 0, :y 1}]))
也不返回任何内容。有谁知道我如何至少可以访问 fn 函数中向量内的值?
最后,我的向量是否是通过调用另一个函数生成的,这重要吗?
例如,
(defn attack [x y] (map (fn [coord] coord) (get-attack-coordinates x y)))
这会是一个问题吗?我猜不是,但为了以防万一,我认为询问是个好主意。感谢大家的阅读:)
最佳答案
map
在这种情况下确实返回
(map (fn [coord] coord) [{:x 1, :y 0} {:x 0, :y 1}])
;; => ({:x 1, :y 0} {:x 0, :y 1})
请注意,在这种情况下:
(map (fn [coord] (println (get coord :x))) [{:x 1, :y 0} {:x 0, :y 1}])
它会先打印1,然后打印0,然后返回
(nil nil)
因为 println
返回 nil
。
此外,如果您想访问 x
和 y
,您还可以使用 destructuring :
(map (fn [{:keys [x y]}] [x y]) [{:x 1, :y 0} {:x 0, :y 1}])
请注意,我在 REPL 中尝试了这些操作:
关于vector - 如何在 clojure 中的 map 向量上使用 map 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56553743/
我是一名优秀的程序员,十分优秀!