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