1

嗨,大家好!我正在运行康威的人生游戏——但我想我必须在这里修改原始版本:https ://github.com/sebastianbenz/clojure-game-of-life 以在文件中引用field.clj(而不是run.clj) 。project.clj这样做后,我可以通过运行开始游戏

repl> (run-game)

但是,它在此方法上崩溃,该方法没有关于输入参数的评论。

因此,我的问题是:从 Clojure 语法的角度来看,这种形式(似乎是做什么的)是什么?

(defn run-game
  ([engine seed]
    (run-game engine seed
      {:columns 50 :rows 50 :speed 500 :cellsize 10}))
  ([engine seed options]
    (let [panel (field-panel engine seed options)
          frame (field-frame panel)
          timer (Timer. (options :speed) panel)]
      (.start timer))))

更新_

  • 为什么“[engine-seed]”嵌套在括号中?

  • 为什么这个函数是递归的?

  • 关于如何设计此功能的任何其他语法级别的见解?

4

1 回答 1

4

我不是 100% 确定你在问什么,但它基本上定义了一个函数,该函数接受engineseed参数或engine,seedoptions参数。

如果option未指定参数,该函数将创建一个默认映射{:columns 50 :rows 50 :speed 500 :cellsize 10}并调用第二种形式。

您必须查看代码以确定应该设置的engine内容。seed

然后您可以将其称为:

(run-game engine seed)

或者

(run-game engine seed {:columns 75 :rows 75 :speed 750 :cellsize 15})

这有帮助吗?

于 2012-03-11T18:28:38.580 回答