2015-11-19 43 views
1

如果任何所需的表單都是Javascript interop的一部分,是否可以使用「線程優先」宏?在Javascript Interop中使用Clojurescript線程優先宏

例如,如果你在大小爲10的範圍要組的意見,你可能有類似以下內容:

(defn get-size [i] 
    (-> i 
     (/ 10) 
     (.ceil js/Math))) 

然而,這並不師被傳遞給後上班想必結果就好像它是一個函數一樣。將最後一個形式包含在額外括號中以嘗試將其評估爲單個函數表達式也似乎不起作用。

回答

4

-> &朋友不關心他們所操作的表達式是否與互操作有關 - 他們只能將表單視爲數據結構並根據簡單的規則轉換它們。

您的例子不工作的原因在於,它試圖與js/Math作爲參數調用一個名爲ceil方法上的數字,而不是調用該方法Math.ceil上的數字:

  1. (-> i (/ 10) (.ceil js/Math))

  2. (-> (/ i 10) (.ceil js/Math))

  3. (.ceil (/ i 10) js/Math)

這會工作:

(-> i (/ 10) (->> (.ceil js/Math))) 

由於要使用正確的參數順序匿名函數的方法:

(-> i (/ 10) (#(.ceil js/Math %))) 

對於更復雜的情況下,初始參數->不僅僅是i更復雜你可能會發現as->相當有用。