我认为这是Scala相对较新的人。我已经看到了如何在Scala中创建“控制构造”的示例,但我不太了解Scalatra本身的代码。
有人可以解释'params'如何传递给定义的路由处理程序吗?我觉得这是一种有用的技术,我想知道它是如何完成的。
谢谢!
编辑:添加来自Scalatra网站的示例代码,以说明我在说什么:
class HelloWorldApp extends ScalatraFilter {
get("/") {
<h1>Hello, {params("name")}</h1>
}
}
答案 0 :(得分:3)
这些是涉及的特征:
trait ScalatraFilter extends Filter with ServletBase
trait ServletBase extends ScalatraBase with SessionSupport with Initializable
trait ScalatraBase extends ScalatraContext with CoreDsl with DynamicScope.....
使用params时,您使用的是ScalatraBase中定义的少数重载方法之一
def params(key: String)(implicit request: HttpServletRequest): String = params(request)(key)
def params(key: Symbol)(implicit request: HttpServletRequest): String = params(request)(key)
def params(implicit request: HttpServletRequest): Params = new ScalatraParams(multiParams)
检查代码
https://github.com/scalatra/scalatra/blob/develop/core/src/main/scala/org/scalatra/ScalatraBase.scala https://github.com/scalatra/scalatra/blob/develop/core/src/main/scala/org/scalatra/ScalatraFilter.scala https://github.com/scalatra/scalatra/blob/develop/core/src/main/scala/org/scalatra/servlet/ServletBase.scala
答案 1 :(得分:0)
通过使用Scala的DynamicVariable
课程来完成。这是一篇简短的博客文章,非常好地解释了它。
http://www.riffraff.info/2009/4/11/step-a-scala-web-picoframework