Scala中的Thunk包装方法
我的类中有几个方法,每个方法接受不同的参数并返回不同的参数。对于这些方法中的每一种,我都希望将它们封装在一段通用代码中,以便进行一些时间记录。例如,当方法开始时,它记录开始时间,当它结束时,它记录结束时间等等 我已实施此方法:Scala中的Thunk包装方法,scala,Scala,我的类中有几个方法,每个方法接受不同的参数并返回不同的参数。对于这些方法中的每一种,我都希望将它们封装在一段通用代码中,以便进行一些时间记录。例如,当方法开始时,它记录开始时间,当它结束时,它记录结束时间等等 我已实施此方法: def withTimerMetrics(fn: => _) = { Try(AppMetrics.timer.time()).map(context => { fn context.close() }) } 其中
def withTimerMetrics(fn: => _) = {
Try(AppMetrics.timer.time()).map(context => {
fn
context.close()
})
}
其中fn是在我的类中实现的方法之一
显然,我得到了一个未绑定的通配符错误。我有办法做到这一点吗?我不想为此使用Scala宏。还有其他想法吗?您有错误的方法签名。试试这个:
def withTimerMetrics[T](fn: => T) = {
Try(AppMetrics.timer.time()).map(context => {
fn
context.close()
})
}
不确定,为什么要在Try
中包装time()
(是codahale度量吗?),因为现在如果不更改输出,就无法对函数进行计时。我认为应该是这样的:
def withTimerMetrics[T](fn: => T): T = {
val c = AppMetrics.timer.time()
try {
fn
} finally {
context.close()
}
}
因此,您可以在不改变应用程序逻辑的情况下测量执行时间。什么是
AppMetrics
,为什么timer.time()
会在下一个map
中输出您调用的可关闭上下文
?您试图实现什么?是否为您的函数提供某种装饰器(包装器)来记录前后的时间?您可以用AnyRef
替换。
,以便捕获所有函数。