Scala DSL:如何从应用调用中省略括号?

时间:2015-07-13 14:36:37

标签: scala dsl

我为测量单位写了一个小型库(是的,我可以为此使用squants,但我需要一些squants不提供的功能)。我的单位类别为UnitOfMeasure,数量(即数字和单位)为Quantity

假设我将m定义为UnitOfMeasure,我想写下这样的内容:

val q = 3.0 m

我在包对象中创建了一个类QuantityWrapper,如下所示:

implicit class QuantityWrapper[T](value: T)(implicit num: Numeric[T]) {

  def apply(unit: UnitOfMeasure[T]): Quantity[T] =
    Quantity(value, unit)
}

所以我现在可以做到:

val q = 3.0(m)

因为3.0被隐式转换为QuantityWrapper[Double]m已被定义为UnitOfMeasure[Double]

但我希望能够省略括号。如果没有在QuantityWrapper中为每个单位定义方法,这可能吗?

1 个答案:

答案 0 :(得分:4)

  

如果没有在QuantityWrapper中为每个单位定义方法,这是否可行?

没有。无论您做什么,3.0 m始终会被解析为(3.0).m,因此m上必须存在方法Double(可能通过隐式转换)。