不可变数据与 vswap! 是在 1.7 从中添加的性能机制,以对语言进行非协调整体的修改。
鉴于它们的添加以性能为中心,vswap! 作为一个宏而不是普通函数实现,以避免函数 var 的运行时解引用以及多个参数时的可选 apply 负载。
但是这一点
-并非必要
-破坏了 volatile/atom、swap!/vswap! 和 reset!/vreset! 的 API 并行性
-使得某些用法(例如在 update-in 表达式中的 vswaps!)变得不可能
-由于 swap! 是一个函数,可能会引起混淆
事实上,这个宏可以用具有 :inline 元数据的函数替换。
这是一个严格添加性更改,将确保对于所有当前的 vswap! 有效用法,没有任何变化,它仍然会被内联器宏展开,并且由于现在是函数,它可以在 HOF 环境中使用,其中 swap! 的使用并不少见。