评论者:alexmiller
(就像大多数事情一样),显而易见的事情并不那么容易办到。 :)
调用instrument有几种方式:
- (instrument)
- (instrument sym)
- (instrument (link: syms))
- (instrument sym opts)
- (instrument (link: syms) opts)
这里数字是变量。类似地,"body"在其他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))))
`
关于之前已经插入多少的内容,可能需要考虑一些有趣的事情。你是想要删除你插入的部分,还是尝试将插入返回到之前的状态(其中可能已经插入了一些内容)?