ScalaMeter如何链配置
How can ScalaMeter chain configuration
我很困惑 ScalaMeter 怎么能像这样链式配置
val standardConfig = config(
Key.exec.minWarmupRuns -> 5,
Key.exec.maxWarmupRuns -> 10,
Key.exec.benchRuns -> 10,
Key.verbose -> true
) withWarmer(new Warmer.Default)
第一个config(...)
表达式returns MeasureBuilder[T, U]
类型,这个我懂了。
但是,我们如何链接第二个表达式 withWarmer(new Warmer.Default)
,它也是 returns MeasureBuilder
类型。
起初,我猜 MeasureBuilder
类型实现允许我们这样做的 apply 方法,但在测量一段代码的性能之前的最后一步,我们需要
val partime = standardConfig measure {
...
}
其中 measure { ... }
return Quantity[U]
类型不是 MeasureBuilder
.
那么,ScalaMeter 配置如何链接这样的表达式?
请首先注意 config
方法在导入后公开:
import org.scalameter.config
这是因为它是在包级别的companion object上声明的:
package object scalameter extends MeasureBuilder[Unit, Double](
因此,当您声明 val standardConfig = config(...)
时,您会得到 MeasureBuilder[Unit, Double]
之后classMeasureBuilder
暴露了一个方法withWarmer
,实际调用了,returns一个MeasureBuilder[Unit, Double]
,既有配置又有warmer应用。
MeasureBuilder
公开了一个方法 measure
:
def measure[S](b: =>S): Quantity[U] = measured(b)._2
在您的示例中 returns Quantity[Double]
。
我很困惑 ScalaMeter 怎么能像这样链式配置
val standardConfig = config(
Key.exec.minWarmupRuns -> 5,
Key.exec.maxWarmupRuns -> 10,
Key.exec.benchRuns -> 10,
Key.verbose -> true
) withWarmer(new Warmer.Default)
第一个config(...)
表达式returns MeasureBuilder[T, U]
类型,这个我懂了。
但是,我们如何链接第二个表达式 withWarmer(new Warmer.Default)
,它也是 returns MeasureBuilder
类型。
起初,我猜 MeasureBuilder
类型实现允许我们这样做的 apply 方法,但在测量一段代码的性能之前的最后一步,我们需要
val partime = standardConfig measure {
...
}
其中 measure { ... }
return Quantity[U]
类型不是 MeasureBuilder
.
那么,ScalaMeter 配置如何链接这样的表达式?
请首先注意 config
方法在导入后公开:
import org.scalameter.config
这是因为它是在包级别的companion object上声明的:
package object scalameter extends MeasureBuilder[Unit, Double](
因此,当您声明 val standardConfig = config(...)
时,您会得到 MeasureBuilder[Unit, Double]
之后classMeasureBuilder
暴露了一个方法withWarmer
,实际调用了,returns一个MeasureBuilder[Unit, Double]
,既有配置又有warmer应用。
MeasureBuilder
公开了一个方法 measure
:
def measure[S](b: =>S): Quantity[U] = measured(b)._2
在您的示例中 returns Quantity[Double]
。