作者:萱璇妍幽 | 来源:互联网 | 2022-12-10 03:30
我正在使用多方法提供不同的功能,具体取决于我的项目运行的"模式"(它是一个yada api服务器,应该能够运行:dev
,:prod
模式等).
我正在使用mount/defstate
提供关键字:
(defstate mode :start :dev)
当我发送使用时(constantly mode)
,我得到错误但是当我使用(fn [& _] mode)
它发送时似乎工作.
这两种形式不一样吗?或者评估它们的方式(或时间)是否存在细微差别?
1> erdos..:
在mount中如果尚未启动状态,那么它们的值就是DerefableState
对象.
通过不断调用,首先评估值,mode
然后constantly
使用值调用函数.这意味着当你调用constantly
它的结果时,它将始终返回参数,尽管你已经改变了它.如果你在打电话之前没有开始你的状态constantly
那么它会存储DerefableObject
.
另一方面,每次调用函数时都要(fn [& _] mode)
评估mode
var 的值.如果你还没有开始状态,那么它也会返回a DerefableState
但是如果你有,那么结果将是预期的关键字.
一个简单的解决方案是将调度功能也置于一个状态.
(defstate dispatch :start (constantly state))