Ответ 1
Литеральный синтаксис ушел (или уйдет, я думаю) и вряд ли вернется в любой форме, хотя были предложены альтернативы типа 0o700
.
Если вам нужно что-то более похожее на литерал компиляции во 2.10, вы можете использовать макросы (эта конкретная реализация вдохновлена Macrocosm):
import scala.language.experimental.macros
import scala.reflect.macros.Context
object OctalLiterals {
implicit class OctallerContext(sc: StringContext) {
def o(): Int = macro oImpl
}
def oImpl(c: Context)(): c.Expr[Int] = {
import c.universe._
c.literal(c.prefix.tree match {
case Apply(_, Apply(_, Literal(Constant(oct: String)) :: Nil) :: Nil) =>
Integer.decode("0" + oct)
case _ => c.abort(c.enclosingPosition, "Invalid octal literal.")
})
}
}
Затем вы можете написать следующее:
scala> import OctalLiterals._
import OctalLiterals._
scala> o"700"
res0: Int = 448
Теперь вы не платите за разбор строки во время выполнения, и любой недопустимый вход попадает во время компиляции.