2012-08-16 82 views
4

有時候我會看到有boot.scala或Boot.scala文件的項目。雖然這看起來不是一個硬性和快速的Scala規則,但它看起來似乎是一種民間傳說,包括Boot.scala文件在一些項目中。這個特定的項目使用Akka和Spray,它轉換爲演員模式和REST服務。Boot.scala適合在哪裏?

會有人請解釋通常可以在這樣一個文件可以預期什麼類型的功能,如果這是某種形式的共同的模式?

進行了擴展,這個問題(請回答第一位第一:-),我將不勝感激知道如何閱讀代碼,這是在具有多個Boot.scala文件的項目。

trait Web { 
    this: Api with Core => 
.... 
} 

Boot.scala在API包:

trait Api { 
    this: Core => 
.... 
} 

Boot.scala核心包:

trait Core { 
    implicit def actorSystem: ActorSystem 
    implicit val timeout = Timeout(30000) 

    val application = actorSystem.actorOf(
    props = Props[ApplicationActor], 
    name = "application" 
) 

    Await.ready(application ? Start(), timeout.duration) 

} 

一個能夠用於收集用戶

在web包

Boot.scala一個軟件包依賴於另一個軟件包,並且Boot.scala文件可能在基於角色的系統中很常見,但是如何操作一個人是否會閱讀這些關係?例如,我如何閱讀英語中的特徵Web {this:Api with Core => ...}?

在特定情況下,應用程序的出發點是主文件:

object Main extends App { 
    implicit val system = ActorSystem("RESTService") 

    class Application(val actorSystem: ActorSystem) extends Core with Api with Web { 

    } 

    new Application(system) 

    sys.addShutdownHook { 
    system.shutdown() 
    } 

} 

我意識到我的問題似乎微不足道了一些,但我試圖進入Scala的部落在這裏,並且'祕密密碼'不在任何手冊中。

回答

5

我不知道是否Boot.scala是一種常見的模式,但它在電梯使用,幷包含應用程序的主要配置。由於Lift是相當古老的(相對於其他Scala項目),它可能會設定一個約定。

對於你應該在cake patternself types讀了其他問題。例如

trait Web { 
    this: Api with Core => 
.... 
} 

限定的性狀Web只能被混合到從APICore繼承或有這些作爲其自種部分類或性狀。因此

class Application(val actorSystem: ActorSystem) extends Core with Api with Web { 

} 

不會類型檢查,如果因爲它是由Web特性所需的Api性狀不混合。

+1

啊哈,現在很多東西都落在了地方。謝謝Kim。 – Jack 2012-08-16 11:35:59