Scala 连接案例类和模型中的对象

Scala 连接案例类和模型中的对象,scala,playframework,Scala,Playframework,我已经开始学习Play,在我看到的教程中,模型通常有两个组件:一个案例类和一个对象 我已经用一个对象和一个case类创建了一个模型。我的问题是如何从对象引用字段(在case类中声明): 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 {

我已经开始学习Play,在我看到的教程中,模型通常有两个组件:一个
案例类
和一个
对象

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

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
,但我得到
无法解析符号url


如何引用该字段?

您不能。对象中的任何字段都可以从相应的类定义中访问,但不能从相反的类定义中访问。以一种过于简单的方式,您可以将对象看作类的静态部分(在java中,您可能会使用
static
)。有关更多详细信息,您可以查看此项。

您不能。对象中的任何字段都可以从相应的类定义中访问,但不能从相反的类定义中访问。以一种过于简单的方式,您可以将对象看作类的静态部分(在java中,您可能会使用
static
)。有关更多详细信息,请参见此项。

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

readPageContent
方法添加参数:

def readPageContent(page: Page): String = {
  new URL(page.url).getContent().toString
}
case class Page(url: String) {
  def readPageContent(page: Page): String = {
    new URL(this.url).getContent().toString
  }
}
readPageContent
方法移动到
Page
类本身:

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

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

readPageContent
方法添加参数:

def readPageContent(page: Page): String = {
  new URL(page.url).getContent().toString
}
case class Page(url: String) {
  def readPageContent(page: Page): String = {
    new URL(this.url).getContent().toString
  }
}
readPageContent
方法移动到
Page
类本身:

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

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