gpt4 book ai didi

clojure - 交换什么!使用 assoc 和 (-> % .-target .-value) 语法在 ClojureScript 中意味着什么?

转载 作者:行者123 更新时间:2023-12-02 15:29:55 24 4
gpt4 key购买 nike

我试图理解《Web Development With Clojure》一书中的这段代码。关于 clojure 脚本:

(defn message-form [] 
(let [fields (atom {})]
(fn []
[:div.content
[:div.form-group
[:p "Name:"
[:input.form-control
{:type :text
:name :name
:on-change #(swap! fields assoc :name (-> % .-target .-value))
:value (:name @fields)}]]]
[:p "Message:"
[:textarea.form-control
{:rows 4
:cols 50
:name :message
:on-change #(swap! fields assoc :message (-> % .-target .-value))}
(:message @fields)]]
[:input.btn.btn-primary {:type :submit :value "comment"}]])))

谁能解释一下这部分:

#(swap! fields assoc :name (-> % .-target .-value)

尤其是这个: ...(-> % .-目标 .-值)

最佳答案

[:input {:on-change #(swap! fields assoc :name (-> % .-target .-value)}]

这定义了一个输入和一个函数,每次用户更改输入字段时都会调用该函数,即。 e.类型在其中。该函数将以更改事件对象作为参数调用,然后将其绑定(bind)到 %。事件目标是输入字段 DOM 元素,其文本内容为 value。然后,该函数更改 fields 以包含 :name 该内容。

#(…)% 属于一起:#(…) 创建一个匿名函数,而 % 创建匿名函数code> 是其参数的名称。

-> 是一个宏,它将常见的 lispy 前缀组合形式反转为类似于后缀组合或“管道”的内容:(-> % .-target .-value) 扩展为 (.-value (.-target %))

.-value 表示法是 ClojureScript 中的 JavaScript 互操作。它表示对 JavaScript 对象的字段“值”的访问; ClojureScript 中的 (.-value foo) 本质上与在 JavaScript 中编写 foo.valuefoo["value"] 相同。 p>

关于clojure - 交换什么!使用 assoc 和 (-> % .-target .-value) 语法在 ClojureScript 中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51910951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com