【发布时间】:2017-10-10 14:26:56
【问题描述】:
我目前正在 scala-d3-js 上开发 DSL,我正在尝试使用 currying 和类型定义来避免在以下代码中出现多个映射:
trait HistogramInterface {
import constants.Distributions._
type Fun = ((Double) => js.Function0[Double]) | ((Double) => ((Double) => js.Function0[Double]))
val DistributionMap: Map[String, Fun] = Map(
Bates -> ((count: Double) => d3.random.bates(count)),
Normal -> ((mean: Double) => (deviation: Double) => d3.random.normal(mean, deviation)),
LogNormal -> ((mean: Double) => (deviation: Double) => d3.random.logNormal(mean, deviation)),
IrwinHall -> ((count: Double) => d3.random.irwinHall(count))
)
implicit object Histogram extends HistogramInterface {
def apply(nbBars: Int, dataArg: Seq[Double]): Selection[EventTarget] = createHistogram(nbBars, dataArg)
}
implicit object DistributionHistogram extends HistogramInterface {
def apply(nbBars: Int, token: String, args: Double*): Selection[EventTarget] = {
val DistributionFun = DistributionMap(token)(args(0)) // application does not take parameters
val values = token match {
case Bates => d3.range(1000).map(_ => DistributionFun.apply())
case Normal => d3.range(1000).map(_ => DistributionFun.apply())
}
// Do stuff
}
}
}
使用此代码,我在分配常量 DistributionFun 时收到“应用程序不接受参数”。
【问题讨论】: