В Scala есть интерполяция строк, например raw"\n"
для необработанных строк.
Есть ли в нем что-то вроде интерполяции чисел, например. 1px
за один пиксель? Хороший синтаксис для числовых единиц сделает код более читабельным и упростит написание более безопасного кода.
Как и строки, числа имеют приятный литеральный синтаксис и являются фундаментальными.
префиксная нотация px(1)
- это не то, как люди пишут единицы:
case class px(n: Int)
И я не думаю, что постфиксная запись через неявное преобразование может работать:
case class Pixels(n: Int) {
def px() = Pixels(n)
def +(p: Pixels) = p match {case Pixels(m) => Pixels(n+m)}
}
implicit def Int2Pixels(n: Int) = Pixels(n)
ему нужна точка, пробел или круглые скобки (т. е. не
(1 px)
,(1)px
или1.px
, так как люди не пишут единицы измерения).он не будет проверять типы, т.е. мы хотим явно выполнять приведение между этими числовыми псевдонимами типов и самими числами (т.е.
1.px + 2
и1 + 2.px
иdef inc(p: Pixels) = p + Pixels(1)
сinc(0)
все не терпят неудачу из-за неявного приведения, когда они должны).
1f
и1d
также считаются числами, и кажется, что Scala не может понять, где заканчивается числовая часть и начинается методическая часть. Ваш подход отлично сработает сString
s:"1"px
отлично сработает - person serejja   schedule 15.04.20141px
удалять сахар так же, как он делаетs""
, сpx
методом расширения для специального типа вместо Int. - person som-snytt   schedule 16.04.2014