评论者:alexmiller
所以(和大多数事情一样),明显的事情并不明显。 :)
有多种方式调用仪器
- (instrument)
- (instrument sym)
- (instrument (link: syms))
- (instrument sym opts)
- (instrument (link: syms) opts)
这里的数字是可变的。类似地,其他 with-style 宏中的“主体”通常也是可变参数。解析这两个可变参数是模糊的。
你提到了 opts 映射,所以我假设你想要它作为可选参数。因此,您可以缩小参数为:(link:sym-or-syms opts & body)。不确定你是否因此引入了一些在常见情况下不需要的东西,从而破坏了宏的有用性。
(with-instrument `my-fun {my-opts ...} (test-something))
将扩展为
`
(do
(instrument user/my-fun {my-opts ...})
(try
(test-something)
(finally
(unstrument user/my-fun))))
`
也许我们可以思考一下有多少已经仪器化的要考虑。你是取消你已经仪器化的吗,或者尝试将仪器化恢复到原来的状态(其中一些东西可能已经被仪器化)?