You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clojure Web应用中随机化函数调用后不再随机的问题求助

问题根源

你用def定义make-board时,会在应用启动阶段仅执行一次board/setup-board,并把生成的棋盘结果缓存为全局变量。后续所有访问/make-board的请求,都会直接返回这个预先计算好的缓存值,自然不会重新生成随机棋盘。把setup-board改为动态变量没用——根本问题是结果被提前固化,和变量作用域无关。

解决方案

把make-board从全局变量改成函数,让每次请求进来时都重新执行board/setup-board:

(defn make-board [] ; 改为函数定义
  {:status  200
   :headers {"Content-Type" "text/html"}
   :body    (str (board/setup-board))})

同时修改路由,确保请求触发时调用这个函数:

(defroutes app
  (GET "/make-board" [] (make-board)) ; 调用函数而非直接引用变量
  (GET "/" [] home-page)
  (GET "/login" [] login)
  (not-found "404 not found!"))
逻辑验证
  • 应用启动时,make-board函数不会立即执行,只有当/make-board请求到达时才会触发。
  • 每次请求都会重新调用board/setup-board生成全新的随机棋盘,返回结果不再重复。

内容的提问来源于stack exchange,提问作者triplej

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:54:17