看到
https://issues.scala-lang.org/browse/SI-5205

https://github.com/scala/scala-dist/pull/20

scala已弃用了以0开头的八进制转义值,我看不到惯用的替代方法。

您现在如何在scala 2.10中处理八进制?

编辑-Unix权限为八进制

最佳答案

字面语法已消失(或可能会消失),并且不太可能以任何形式返回,尽管诸如0o700 have been proposed之类的替代方法也是如此。

如果您想要更像2.10中的编译时文字,可以使用宏(此特定实现为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.")
    })
  }
}


然后,您可以编写以下内容:

scala> import OctalLiterals._
import OctalLiterals._

scala> o"700"
res0: Int = 448


现在,您无需为在运行时解析字符串付费,并且在编译时会捕获任何无效的输入。

10-05 21:37