Dosłowna składnia już nie istnieje (lub, jak sądzę) i raczej nie powróci w żadnej formie, chociaż istnieją alternatywy, takie jak 0o700
have been proposed.
Jeśli chcesz coś bardziej jak kompilacji dosłowne w 2.10, można użyć makra (ta konkretna realizacja jest inspired by 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.")
})
}
}
Następnie można napisać następujące:
scala> import OctalLiterals._
import OctalLiterals._
scala> o"700"
res0: Int = 448
Teraz nie płacisz za analizowanie ciągu znaków w czasie wykonywania, a wszelkie nieprawidłowe dane zostaną przechwycone podczas kompilacji.
Cytując [Seth Tisue] (https://groups.google.com/d/msg/scala-debate/ vG4tqdz1SgQ/DZ1Wbm8ZzNsJ): "Cyfry ósemkowe są rzeczami końskimi i buggy". Prawie nikt ich nie używa, a prawie każdy został ukąszony przez dziwaczny fakt, że np. '021 == 17'. –
Uprawnienia unixa są ósemkowe – JasonG