Jas*_*onG 14 scala idiomatic octal scala-2.10
请参阅 https://issues.scala-lang.org/browse/SI-5205 和 https://github.com/scala/scala-dist/pull/20
从scala中弃用了八进制转义值前导0,我没有看到惯用的替代方法.
你现在如何处理scala 2.10中的octals?
编辑 - unix权限是八进制
Tra*_*own 17
字面语法已经消失(或者说,我猜)并且不太可能以任何形式返回,尽管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.")
})
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以编写以下内容:
scala> import OctalLiterals._
import OctalLiterals._
scala> o"700"
res0: Int = 448
Run Code Online (Sandbox Code Playgroud)
现在,您不需要在运行时解析字符串,并且在编译时捕获任何无效的输入.