评论由:hiredman
这必须与 CLJ-1422 和 CLJ-701 是同一个问题,它与返回 this
没有关系,而是与 try 是否位于尾部位置有关。如果 try 不在尾部位置,编译器会将其提升到 thunk 中。实际上,代码是
(deftype SomeType [^:volatile-mutable foo] SomeProtocol (someFn [_] ((fn [] (try (set! foo 1))))))
编译器也会拒绝它,因为它不允许您从不是直接协议函数的函数中更改字段