我为测量单位写了一个小型库(是的,我可以为此使用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
中为每个单位定义方法,这可能吗?
答案 0 :(得分:4)
如果没有在
QuantityWrapper
中为每个单位定义方法,这是否可行?
没有。无论您做什么,3.0 m
始终会被解析为(3.0).m
,因此m
上必须存在方法Double
(可能通过隐式转换)。