【问题标题】:Recursive Call with goog.dom.animationFrame使用 goog.dom.animationFrame 递归调用
【发布时间】:2018-07-25 19:08:11
【问题描述】:

我正在尝试使用 google 关闭 animationFrame 功能。 我想用它创建一个动画任务并递归调用创建的任务。

我定义了一个名为 animationTask 的 def。 当我尝试在该任务中递归使用该 def 时,它失败了。它会注销 animationTask 未定义,因此不能用作函数。

谁能指出我正确的方向? 我觉得我在这里缺少一些基本的 clojure 知识。

【问题讨论】:

  • 您将 (animationTask) 作为函数调用,但未定义为函数。您应该使用 (defn animationTask [] ...) 定义它
  • 我不这么认为。 ganimation/createTask 确实产生了一个函数
  • 你想让:measure下的值成为一个函数吗?换句话说,将do 替换为fn [state]? (:mutate 的参数相同)
  • 请将所有代码以文本形式直接发布在这里。
  • 顺便说一句,您可能希望在传递给ganimation/createTask 的参数上使用#js,否则您传递的是持久映射而不是JavaScript 对象。

标签: clojurescript google-closure-library


【解决方案1】:

您的代码在定义之前调用了动画任务函数。它类似于这个更简单的代码:

(defn create [x] (fn []))

(def task (create {:measure (task)}))

如果您在 REPL 中尝试这样做,您会看到 task 在尚未定义时被调用。

相反,:measure 下的值应该是一个函数,并且 API 接受一个 JavaScript 对象。这类似于将上面的示例修改为:

(def task (create #js {:measure (fn [state] (task))}))

【讨论】:

    猜你喜欢
    • 2015-08-14
    • 2016-08-07
    • 2016-03-21
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2019-10-18
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多