2

我问这个作为 Scala 的一个相对较新的人。我已经看到了如何在 Scala 中创建“控制结构”的示例,但我不太了解它,无法遵循 Scalatra 本身的代码。

有人可以解释一下“参数”是如何传递给定义的路由处理程序的吗?我觉得这是一种有用的技术,我想知道它是如何完成的。

谢谢!

编辑:添加来自 Scalatra 网站的示例代码来说明我在说什么:

class HelloWorldApp extends ScalatraFilter {
  get("/") {
    <h1>Hello, {params("name")}</h1>
  }
}
4

2 回答 2

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

于 2013-02-27T22:47:22.547 回答
0

它是通过使用 Scala 的DynamicVariable类来完成的。这是一篇简短的博客文章,它很好地解释了它。

http://www.riffraff.info/2009/4/11/step-a-scala-web-picoframework

于 2014-07-31T18:24:27.333 回答