Scala喷涂路由语法
这是一个例子中的代码:
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找到. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Axis2创建WebService实例
- AngularJs 功能(四)--控制器
- angularJS如何让控制器与控制器进行通信,个人理解。
- Binary Serialization and BinaryFormatter with WebServic
- 使用Bootstrap插件datapicker获取时间
- 基于Bootstrap3制作响应式布局网站(四)
- angular-file-upload封装为指令+图片尺寸限制
- angularjs – Angular ui-router:如何在解析子解析之前渲染
- AngularJS错误:$compile:multidir多指令资源争用
- 在随后的bash提示符中包含非0退出代码