【问题标题】:Scala DSL: How to omit parentheses from apply call?Scala DSL:如何在应用调用中省略括号?
【发布时间】:2015-07-13 23:03:31
【问题描述】:

我为度量单位编写了一个小型库(是的,我可以为此使用 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 中定义方法,这是否可能?

【问题讨论】:

    标签: scala dsl


    【解决方案1】:

    如果不为我拥有的每个单元在 QuantityWrapper 中定义方法,这是否可能?

    没有。无论你做什么,3.0 m 总是会被解析为(3.0).m,所以Double 上必须存在m 方法(可能通过隐式转换)。

    【讨论】:

    • 好的,然后我会将最常见的单元定义为方法,并为其他单元使用带括号的版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 2017-01-02
    相关资源
    最近更新 更多