首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Clojure,懒惰的评估问题

问题:Clojure 中,如何避免懒惰的评估问题?

答案:Clojure 中的懒惰评估问题可以通过使用 delayat 函数避免。delay 函数可以使得其参数在一段时间后执行,而 at 函数可以指定一个时间后执行。

例如,下面的代码中,如果 x 是一个无法解析的字符串,则在 when 语句中,x 的值会被设置为 nil,并且 x 的值不会发生变化,直到下一次 when 语句被执行时,才会重新进行评估:

代码语言:txt
复制
(when (or (not (string? x)) (resolve x))
  (println x))

如果使用 delayat 函数,则可以避免这种情况:

代码语言:txt
复制
(delay (when (or (not (string? x)) (resolve x))
          (println x)))

在上面的代码中,如果 x 是一个无法解析的字符串,则在 when 语句中,x 的值会被设置为 nil,并且 x 的值不会发生变化,直到下一次 when 语句被执行时,才会重新进行评估。

需要注意的是,使用 delayat 函数时,需要将表达式放在 delay 函数的括号中,并且需要加上括号,否则会报错。例如,下面的代码会报错:

代码语言:txt
复制
(delay (when (or (not (string? x)) (resolve x))
          (println x)))

而下面的代码则不会出现错误:

代码语言:txt
复制
(delay[(when (or (not (string? x)) (resolve x))
          (println x)])

希望这个答案能够帮助你解决 Clojure 中的懒惰评估问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

-

消息称苹果以工程师的数量来评估收购对象

21分51秒

19_ABA问题的解决

1分55秒

解决vue找不到图片的问题

18.4K
7分4秒

20-Promise关键问题-改变状态与指定回调的顺序问题

21分35秒

173-锁的概述_读写的并发问题

8分51秒

[装箱问题]深度强化学习的在线3D装箱,解决优化调度问题

2分30秒

Python Requests库文档链接404问题解决及防止重复问题的建议

7分33秒

17.MySQL乐观锁存在的问题

2分27秒

解决 requests 库中的字节对象问题

3分4秒

解答关于机器学习的三个问题

20分56秒

134-解决获取请求参数的乱码问题

19分48秒

282、商城业务-订单服务-提交订单的问题

领券