Clojurescript`.-name`惯例

Bre*_*dly 2 clojure clojurescript

我一直在努力学习ClojureScript并偶然发现了一些非常神秘的函数名称.

例如:

(.-length str)

来自om文档:

(defn add-contact [data owner]
  (let [new-contact (-> (om/get-node owner "new-contact")
                        .-value ;;What is this?
                        parse-contact)]
    (when new-contact
      (om/transact! data :contacts #(conj % new-contact)))))
Run Code Online (Sandbox Code Playgroud)

那是什么意思.-

Cha*_*ffy 5

这些是检索本机JavaScript属性.因此,(.-length str)将编译到JavaScript str.length.

将此与ClojureScript进行对比(.length str),后者将编译为方法调用str.length()- 这是一个相当不同的事情.


om给定的情况下,代码按顺序执行以下操作:

  • 打电话get-node,并取得结果
  • value取得那个结果的财产
  • parse-contact传递具有该值的函数.

这是因为线程宏->将每个阶段的结果替换为下一个阶段的第一个参数 - 使该代码等效于(parse-contact (.-value (om/get-node owner "new-contact"))).