2015-12-20 62 views
2

我一直在努力學習ClojureScript,並偶然發現了一些非常神祕的函數名稱。Clojurescript`。-name` convention

例如:

(.-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))))) 

什麼是.-想說明什麼?

+0

在宏將要添加參數的上下文中是'。-value',即。 '( - >)'或'( - >)'?它本身沒有意義。 –

+0

啊 - 在'om'的情況下,它在' - >'中,所以*這是*添加參數。 –

回答

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")))代碼。

+0

有沒有可以閱讀'(。-value)'和宏之間關係的地方? – Breedly

+0

在宏的上下文中沒有什麼特別的關於'。-foo'; '''''做的事情總是這樣做。 –

+0

哇!棒極了。所以' - >'是一種組合運算符? – Breedly