评论者: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))))
`
在对已经 instrumented 的内容进行考虑的程度可能会有一些有趣的想法。你是要取消对 instrumented 的配置,还是尝试将配置恢复到之前的状态(其中一些内容可能已经被 instrumented)?