0

Play2 のドキュメントには、次のようなものがあります。

def LoggingAction(f: Request[AnyContent] => Result): Action[AnyContent] = {
  Action { request =>
    Logger.info("Calling action")
    f(request)
  }
}

カリー化のために呼び出すことができる定義に大文字の最初の文字を使用することは、Scala{ ... }の慣例ですか? それともPlay2の選択ですか?

LoggingAction と Action の両方について話しています。

4

1 に答える 1

2

まず、@pedrofurla がコメントで指摘しているように、カリー化はここに表示されているものとは何の関係もありません。2 つ目は、API ユーザーの観点からはLoggingActionActionの動作は似ていますが、それらを区別することが重要です。

Actionクラスとコンパニオン オブジェクトの名前であるため、慣例により大文字が使用されます。が関数のように呼び出されているように見えるため、これは文脈からは明らかではないかもしれませんが、Action実際に起こっていることはもっと微妙です。Actionコンパニオン オブジェクトはapplyメソッドを定義するため、

Action(arg)

の省略形として扱われます

Action.apply(arg)

つまり、関数呼び出しのように見えるものは、実際にはActionオブジェクトのapplyメソッドの呼び出しにすぎません。メソッドが単一の関数を引数として取るこのような場合、中括弧を使用するのが一般的です:

Action apply { request =>
   // ...
}

LoggingAction一方、はメソッドです。大文字のメソッド名は慣習的ではないため、API のユーザーを混乱させる可能性があります。ただし、API 全体で一貫性が得られるため、このような場合には適切な場合があります。一般に、このような使用法の意図は、呼び出しが何かを実行するのではなく、何かを作成していること (ここではロギング アクション)明確することです。大まかな目安として、大文字は名詞表し、小文字は動詞を表します

于 2012-10-26T23:44:49.343 に答える