2016-03-07 82 views
0

我已经开始学习Play,并且在我看到的教程中,该模型通常包含两个组件:case classobject将案例类与模型中的对象连接起来

我用对象和案例类创建了一个模型。我的问题是我怎么引用一个字段(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,但我得到cannot resolve symbol url

我该如何参考该领域?

+1

您不能从对象访问'this.url',因为**对象**没有名为'url'的字段。如果你想从类的实例访问'url',那么对象应该如何知道你想访问'url'的类的哪个实例?这与您不能从静态方法访问实例成员的Java问题等价。看起来你对Scala类和对象有误解。 – Jesper

回答

3

为了引用案例类实例的字段,您需要引用实例本身。

将参数添加到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