【问题标题】:Connecting case class with object in model将案例类与模型中的对象连接起来
【发布时间】:2016-06-21 02:31:30
【问题描述】:

我已经开始学习 Play,在我看到的教程中,模型通常有两个组件:case classobject

我创建了一个带有对象和案例类的模型。我的问题是如何从对象中引用一个字段(在案例类中声明):

package models

import java.net.URL
import play.api.Logger
import play.api.db.DB
import play.api.libs.json.Json

case class Page(url: String)

object Page {
  implicit val personFormat = Json.format[Page]

  def readPageContent(): String = {
    var content: String = new URL(this.url).getContent().toString
    return content
  }
}

例如,在对象中,我尝试使用this.url 引用字段url,但我得到cannot resolve symbol url

如何引用该字段?

【问题讨论】:

  • 您无法从对象访问this.url,因为对象 没有名为url 的字段。如果您尝试从该类的实例访问url,那么该对象应该如何知道您要从该类的哪个实例访问url?这相当于 Java 问题,您无法从静态方法访问实例成员。看来您对 Scala 类和对象有误解。

标签: scala playframework


【解决方案1】:

为了引用案例类实例的字段,您需要引用实例本身。查看您的代码,您可以通过两种方式实现此目的:

readPageContent方法添加参数:

def readPageContent(page: Page): String = {
  new URL(page.url).getContent().toString
}

readPageContent 方法移动到Page 类本身:

case class Page(url: String) {
  def readPageContent(page: Page): String = {
    new URL(this.url).getContent().toString
  }
}

【讨论】:

    【解决方案2】:

    你不能。对象中的任何字段都可以从相应的类定义中访问,但不能相反。以一种过于简单的方式,您可以将对象视为类的静态部分(在 java 中您将使用 static)。更多详情可以看这个SO question

    【讨论】:

      猜你喜欢
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 2022-01-07
      • 2018-06-08
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多