javascript - 将 Clojurescript 线程优先宏与 Javascript Interop 结合使用

标签 javascript clojure macros clojurescript

如果任何必需的形式是 Javascript 互操作的一部分,是否可以使用“线程优先”宏?

例如,如果您想要将输入分组在大小为 10 的范围内,您可能有如下内容:

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

但是,这不起作用,因为除法后的结果可能像函数一样传递给 .ceil。将最后一个形式包裹在额外的括号中以尝试将其评估为单个函数表达式似乎也不起作用。

最佳答案

-> & friend 们不关心他们操作的表达式是否与互操作相关——他们只把表格看作数据结构,并按照简单的规则进行转换。

你的例子不起作用的原因是它试图调用一个名为 ceil 的方法,以 js/Math 作为参数而不是调用该方法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-> 非常有用。

关于javascript - 将 Clojurescript 线程优先宏与 Javascript Interop 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33814861/

相关文章:

javascript - IE7 中的 HTML 输入元素

javascript - 我可以使用 Chrome 开发工具添加资源吗?

visual-studio-2005 - 在哪里可以找到 Visual Studio 宏示例?

Clojure core.match 无法在类上匹配

java - 使用jquery加密用户密码并使用Clojure解密

keyboard - 在 Windows 中编程的最佳键盘宏是什么?

c - 理解递归宏扩展

javascript - 如何查找所有Javascript对象的方法和属性?

javascript - React 中的 Axios get 方法响应无法在我的博客应用程序中显示从 firebase 作为数组获取数据

clojure - 延迟的嵌套取消引用