评论者:alexmiller
(就像大多数事情一样),明显的事情并不总是那么明显。 :)
调用 instrument 有几种方式
- (instrument)
- (instrument sym)
- (instrument (link: syms))
- (instrument sym opts)
- (instrument (link: syms) opts)
这里的数字是可变的。同样,在其他 with-style 宏中,通常 "body" 也通常是可变的。这两个可变的解析是模糊的。
您提到了 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))))
`
也许可以考虑如何更多地考虑到已经仪器化的因素。您是否取消仪器化,还是尝试将仪器化返回到之前的状态(其中某些东西可能已经仪器化)?