Scala 2.10 - 八进制转义已弃用 - 现在如何惯用地执行八进制?

标签 scala scala-2.10 idioms octal

查看 https://issues.scala-lang.org/browse/SI-5205https://github.com/scala/scala-dist/pull/20

以 0 开头的八进制转义值已从 scala 中弃用,我没有看到惯用的替代方案。

现在 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

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

关于Scala 2.10 - 八进制转义已弃用 - 现在如何惯用地执行八进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16590236/

相关文章:

scala - 如何使用 scalatra 通过 sbt-assembly 创建包含 webapp 资源的可执行单个 jar

scala - 为什么 Scala 编译器会出现 "Synthetic tree contains nonsynthetic tree"错误?

Ruby 习语 : method call or else default

language-agnostic - 什么是编程习惯?

java - 类的结构

file - 保存数据结构的类型信息

scala - sbt 在 net.contentobjects.jnotify.macosx.JNotifyAdapterMacOSX.<init>(未知来源)上运行 ExceptionInInitializerError

scala - 为什么/如何将类型构造逻辑分离到不同的类中?

arrays - 隐式类适用于所有 Traversable 子类,包括 Array

java - 引用内部静态 Java 类时工具箱编译的奇怪行为