https://issues.scala-lang.org/browse/SI-5205 および https://github.com/scala/scala-dist/pull/20を参照 してください。
0 に先行する 8 進数のエスケープ値は scala から廃止されました。慣用的な代替手段は見当たりません。
現在、scala 2.10 で 8 進数をどのように扱っていますか??
編集 - UNIX パーミッションは 8 進数です
https://issues.scala-lang.org/browse/SI-5205 および https://github.com/scala/scala-dist/pull/20を参照 してください。
0 に先行する 8 進数のエスケープ値は scala から廃止されました。慣用的な代替手段は見当たりません。
現在、scala 2.10 で 8 進数をどのように扱っていますか??
編集 - UNIX パーミッションは 8 進数です
リテラル構文はなくなっており (または進行中だと思います)、何らかの形で戻ってくる可能性は低いですが、 のような代替案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
これで、実行時に文字列を解析する費用がかからなくなり、無効な入力はコンパイル時にキャッチされます。
BigInt("21",8)
8進数を解析したい場合はいつでもできます。