我想将返回某个类型的 scala 项目中的所有用户定义函数包装T
到一个接受 aT
和函数名作为参数的函数中。
例如。
鉴于此功能在范围内:
def withMetrics[T](functionName: String)(f: => Try[T]): Try[T] = {
f match {
case _: Success[T] => println(s"send metric: success for $functionName")
case _: Failure[T] => println(s"send metric: failure for $functionName")
}
f
}
用户可以为他们的函数发送指标,这些指标Try
通过执行返回
def userDefinedFunction: Try[_] =
withMetrics("userDefinedFunction"){
somethingRisky: Try[_]
}
但我希望用户只需要定义
def userDefinedFunction: Try[_] =
somethingRisky: Try[_]
并让他的业务逻辑Try
隐含地返回withMetrics
。
请注意,用户不应该对代码进行注释,因为这可能会导致他忘记它。相反,在他的项目中定义的所有用户函数都应该withMetrics
自动包装进去。
如何通过使用 Scala 2 或 dotty 宏来实现这一点?或者这可以通过其他方式实现吗?