2

私はこれをScalaの比較的新しい人として求めています。Scalaで「コントロールコンストラクト」を作成する方法の例を見てきましたが、Scalatra自体のコードに従うには十分な知識がありません。

誰かが「params」が定義されたルートハンドラーにどのように渡されるかを説明できますか?それは便利なテクニックだと思います。それがどのように行われるのか知りたいです。

ありがとうございました!

編集:Scalatra Webサイトからサンプルコードを追加して、私が話していることを説明します。

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.....

パラメータを使用する場合、ScalatraBaseで定義されている数少ないオーバーロードされたメソッドの1つを使用しています

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 に答える