2012-08-16 74 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