Scala 在同一文件中导入对象

Scala Import of Object in Same File

我是 scala 的新手,对某些语法 mojo 有点困惑。

我在写喷休息服务。为了指定自定义对象如何编组到 JSON,我创建了以下内容:

  object MyJsonProtocol extends DefaultJsonProtocol {
    implicit object PersonFormat extends RootJsonFormat[Person] {
      def write(p: Person) =JsObject(
        "name" -> JsString(p.name),
        "fname" -> JsString(p.firstName)
      )

      def read(value: JsValue) = {
        value.asJsObject.getFields("name", "firstName", "age") match {
          case Seq(JsString(name), JsString(firstName), JsNumber(age)) =>
            new Person(name, firstName, age.toInt)
          case Seq(JsString(name), JsString(firstName)) =>
            new Person(name, firstName, 0)
          case _ => throw new DeserializationException("Person expected: " + value.asJsObject.getFields("name", "firstName", "age").toString)
        }
      }
    }

}

如果我将它包含在我的 Akka actor subclass 的顶部,为什么我需要包含行

import MyJsonProtocol._

为了在同一个文件中看到它?通常导入是外部引用,并且 class 或与另一个 class 出现在同一文件中的对象可以在没有此类措施的情况下被引用。

感谢您的帮助。 富有

您似乎混淆了在什么范围内可见的内容:

嵌套对象或 类 或 类 可以访问所有 val、嵌套 类 及其周围范围的对象,而不是相反。而且我不懂任何语言,这哪里不一样。

object Outer {
  val foo = "bar"

  object Intermediate {
    object Innermost {
      println(foo)
    }
  }
}

fooInnermost 的 cope 中,因为它嵌套在 foo 本身的范围内。然而,

object Outer {
  object Intermediate {
    object Innermost {
      val foo = "bar"
    }
  }

  println(foo)
}

不会工作,因为 foo 隐藏在嵌套范围的更深处。

让我们重写这个例子:

  object Intermediate 

  object Innermost {
    val bar = "foo"
  }

  object Outer {
    val interm = Intermediate
    val inner = Innermost

    println(Innermost.bar)
  }

在这种情况下,很明显我们必须如何访问 bar。

尽管前面的示例看起来很不一样,但实际上并没有那么大的不同。要访问 'foo' 必须深入研究

object Outer {
  object Intermediate {
    object Innermost {
      val foo = "bar"
    }
  }

  println(Intermediate.Innermost.foo)
}

我希望您现在明白为什么必须深入研究 MyJsonProtocol.PersonFormat 才能将其包含在您的范围内。