2015-07-13 4 views
0

Я написал небольшую библиотеку для единиц измерения (да, я мог бы использовать скребки для этого, но мне нужны некоторые черты, которые не дают). Мой класс устройства - UnitOfMeasure, а количество, то есть число и единица измерения, равно Quantity.Scala DSL: Как опустить круглые скобки из приложения?

Пусть я определил 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 является имплицитом tly преобразован в QuantityWrapper[Double], а m уже определен как UnitOfMeasure[Double].

Но я хочу, чтобы можно было опустить круглые скобки. Возможно ли это без определения методов в QuantityWrapper для каждого устройства, которое у меня есть?

ответ

4

Возможно ли это без определения методов в QuantityWrapper для каждого устройства, которое у меня есть?

No. бы вы ни делали, 3.0 m всегда будет разобрано как (3.0).m, поэтому должен существовать способ m на Double (возможно, с помощью неявного преобразования).

+0

ОК, тогда я определяю наиболее распространенные единицы как методы и перехожу к версии в скобках для других. – rabejens