首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是交换!使用assoc和(-> % .-target .-value)语法在ClojureScript中表示?

什么是交换!使用assoc和(-> % .-target .-value)语法在ClojureScript中表示?
EN

Stack Overflow用户
提问于 2018-08-19 01:11:54
回答 2查看 933关注 0票数 6

我正在尝试理解这段来自Web Development With Clojure的代码。关于clojure脚本:

代码语言:javascript
复制
(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"}]]))) 

有人能解释一下这部分吗:

代码语言:javascript
复制
#(swap! fields assoc :name (-> % .-target .-value)

尤其是这个:...(-> %.-Target.-value)

EN

回答 2

Stack Overflow用户

发布于 2018-08-19 05:58:27

代码语言:javascript
复制
[:input {:on-change #(swap! fields assoc :name (-> % .-target .-value)}]

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

#(…)%属于同一类:#(…)创建一个匿名函数,%是其参数的名称。

->是一个宏,它将表单中常见的松散前缀组合转换为类似后缀组合或“管道”的形式:(-> % .-target .-value)扩展为(.-value (.-target %))

.-value符号是ClojureScript中的JavaScript互操作。它表示对JavaScript对象的字段"value“的访问;ClojureScript中的(.-value foo)本质上等同于在JavaScript中编写foo.valuefoo["value"]

票数 4
EN

Stack Overflow用户

发布于 2018-08-19 01:27:05

#()是一个reader macro。它是匿名函数(fn [args] ...)的缩写,其中%是该函数的第一个参数。

在这种情况下,#(swap! fields assoc :name (-> % .-target .-value)等于(fn [X] (swap! fields assoc :name (-> X .-target .-value))

->是一个threading macro(-> X .-target .-value)等同于(.-value (.-target X))

(.-target X)表示获取对象X的属性target

所以你定义了一个匿名函数,它只接受一个参数。此函数将更改fields原子,以便将其键:name设置为对象value的属性target中对象的属性X的值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51910951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档