如果任何必需的形式是 Javascript 互操作的一部分,是否可以使用“线程优先”宏?
例如,如果您想要将输入分组在大小为 10 的范围内,您可能有如下内容:
(defn get-size [i]
(-> i
(/ 10)
(.ceil js/Math)))
但是,这不起作用,因为除法后的结果可能像函数一样传递给 .ceil
。将最后一个形式包裹在额外的括号中以尝试将其评估为单个函数表达式似乎也不起作用。
最佳答案
->
& friend 们不关心他们操作的表达式是否与互操作相关——他们只把表格看作数据结构,并按照简单的规则进行转换。
你的例子不起作用的原因是它试图调用一个名为 ceil
的方法,以 js/Math
作为参数而不是调用该方法Math.ceil
关于数字:
(-> i (/10) (.ceil js/Math))
(-> (/i 10) (.ceil js/Math))
(.ceil(/i 10)js/Math)
这会起作用:
(-> i (/ 10) (->> (.ceil js/Math)))
与具有正确参数顺序的匿名函数方法一样:
(-> i (/ 10) (#(.ceil js/Math %)))
对于 ->
的初始参数比 i
更复杂的更复杂的情况,您可能会发现 as->
非常有用。
关于javascript - 将 Clojurescript 线程优先宏与 Javascript Interop 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33814861/