2016-03-07 27 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