加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala喷涂路由语法

发布时间:2020-12-16 09:56:43 所属栏目:安全 来源:网络整理
导读:这是一个例子中的代码: import spray.routing.SimpleRoutingAppobject Main extends App with SimpleRoutingApp { implicit val system = ActorSystem("my-system") startServer(interface = "localhost",port = 8080) { path("hello") { get { complete {
这是一个例子中的代码:

import spray.routing.SimpleRoutingApp

object Main extends App with SimpleRoutingApp {

      implicit val system = ActorSystem("my-system")

      startServer(interface = "localhost",port = 8080) {
             path("hello") {
                  get {
                    complete {
                        <h1>Say hello to spray</h1>
                    }
                 }
             }
       }
}

发现于http://spray.io/documentation/1.1-SNAPSHOT/spray-routing/#spray-routing

请原谅我的高兴,因为我来自Java背景……我正在尝试同时获取Scala语言以及此框架.我在语义上理解这里发生了什么,但从语法上来说,我很困惑.

我想了解Scala语言中的哪些构造在这里应用,特别是从调用“startServer”开始,以及{}之间的实现.这样我可以谷歌并研究它…但我不知道该在这里查找什么.我认为这可能与该语言中的一些功能概念有关.

“startServer”似乎是SimpleRoutingApp的一种方法,但看起来你将嵌套函数传递到它的正文中,即“path”,“get”,“complete”……这究竟是如何工作的?谢谢你的帮助.

解决方法

Spray不是最容易学习的东西,特别是当你刚开始使用Scala时,我会尝试解释.

你需要理解的第一件事是currying.用两个词来说,curried函数是一个返回另一个函数的函数.所以startServer是curried函数的一个很好的例子,这里缩短了签名:

def startServer(interface: String,port: Int)(route: ? Route): Future[Http.Bound]

这是一种声明curried函数的方法,startServer接受一个主机和一个端口,然后“返回”一个函数,它接受你的服务路由并返回Http.Bound的未来. Scala中允许的下一个技巧是,你可以在花括号中编写一个arg列表,如{},这用于startServer,第一个arg列表包含两个必需参数,所以你不能使用{}样式,只有(),但是当你传递host:port时,你有一个函数Route =>未来[Http.Bound],所以你可以应用这种风格.此规则可以进一步应用(使用path,get,complete).

你在里面有什么,即

path("hello") {
    get {
      complete {
          <h1>Say hello to spray</h1>
      }
   }
}

是你的实际服务Route.它由所谓的directives组成,它基于HList的无形实现(我不会在这里解释,但你可以在那里找到信息).通常,每个指令都是一个与用户HttpRequest(基本上是RequestContext)有关的函数.所有指令的描述可以在here找到.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读