<scala>スコープ委任はSBTでどのように機能しますか?

ルアハ

SBTでスコープ委任がどのように機能するかを理解するためにリファレンス読みました

上記のリファレンスページから、演習Dを抜粋しました。

ThisBuild / scalacOptions += "-Ywarn-unused-import"

lazy val projD = (project in file("d"))
  .settings(
    test := {
      println((Compile / console / scalacOptions).value)
    },
    console / scalacOptions -= "-Ywarn-unused-import",
    Compile / scalacOptions := scalacOptions.value // added by sbt
  )

projD / testを実行した場合、何が表示されますか?

リスト()

リスト(-Ywarn-unused-import)

他に何か?

そして彼らの推論は

答えはList(-Ywarn-unused-import)です。ルール2はprojD / Compile / Zeroを検出し、ルール3はprojD / Zero / consoleを検出し、ルール4はThisBuild / Zero / Zeroを検出します。ルール1は、サブプロジェクト軸projDがあり、構成軸がタスク軸よりも優先されるため、projD / Compile / Zeroを選択します。

これまでのところ、Compile / console / sclacOptionsがprojD / Compile / zero / scalacOptionsにスコープされる理由を理解できました。これは、projD / Compute / zeroの構成軸が、知りたいキー(Compile / console / scalacOptions)と比較して、projD / zero / consoleよりも具体的であるためです。

次に、Compile / scalacOptionsはscalacOptions.valueを参照します。次に、projD / Zero / Zeroのデリゲートを見つける必要があります。ルール4はThisBuild / Zero / Zeroを検出するため、List(-Ywarn-unused-import)に解決されます。

ここでは、ThisBuild / Zero / ZeroがprojD / Compile / Zeroに勝つ理由がわかりませんでした。見つけたいキーのスコープはprojD / zero / zeroであるため、projD / Compile / zeroは、Thisbuild [リファレンスのルール1に従う]と比較してより具体的な値を持ちます。

その理由は、Compile / scalacOptionsにscalacOptions.valueの値があるためだと思います。これは再帰的定義を生成します。次に、projD / Zero /コンソールを使用できます。

笑い

説明の後半にある差分スコープへの参照について、少し混乱していると思います。例のすべてのスコープを明示的に書き留めましょう。

ThisBuild / Zero / Zero / scalacOptions += "-Ywarn-unused-import"

lazy val projD = (project in file("d"))
  .settings(
    test := { println((Compile / console / scalacOptions).value) }
  )

projD / Zero / console / scalacOptions -= "-Ywarn-unused-import"
projD / Compile / Zero / scalacOptions := (projD / Zero / Zero / scalacOptions).value

を参照できるようにするために、これら2つの設定を削除する必要projDがありましたが、それ以外は同じ定義です。

だから、最初の部分から、あなたはその理解projD / Compile / Zero / scalacOptionsの上に勝利をprojD / Zero / console / scalacOptionsThisBuild / ...

それでは、その価値を取り上げて、タスクで使用してみましょう。しかし、その価値は何ですか?projD / Zero / Zero / scalacOptions明示的に定義されいないものを指します。したがって、その代理人を見つける必要があります。この時点で我々はすでにと競合していないprojD / CompileprojD / consoleし、範囲内の唯一のフィットキーがスコープ内にありますThisBuild / Zero / Zero

私はここでそれを説明しようとしました(/ scalacOptionsスペースを節約するためにを省略しています):

projD     / Compile / console // the one we need in the task
projD     / Zero    / console // could be applied by rule 3, but looses to the next one:
projD     / Compile / Zero    // applies by rule 2 (task scope delegation), defined with next one:
projD     / Zero    / Zero    // not defined explicitly, so is delegated:
ThisBuild / Zero    / Zero    // applies by rule 4 (project scope delegation)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Aggregateはscalaでどのように機能しますか?

分類Dev

<:<演算子はScalaでどのように機能しますか?

分類Dev

printfはscalaでどのように機能しますか?

分類Dev

Scalaでは機能的平等はどのように機能しますか?

分類Dev

このscalaの例では、同期はどのように機能しますか?

分類Dev

Scalaでは「20秒」はどのように機能しますか?

分類Dev

ScalaのfoldLeftはDataFrameでどのように機能しますか?

分類Dev

Scalaのオプションでマップはどのように機能しますか?

分類Dev

Implicit Ordering [Option [T]]はscalaでどのように機能しますか?

分類Dev

`set.contains`はScalaでどのように機能しますか?

分類Dev

Scalaアプリのトレイトとメインは内部でどのように機能しますか?

分類Dev

scala-メソッド::はリストでどのように機能しますか?

分類Dev

ラムダはScalaでどのように機能しますか?匿名クラスの上で機能しますか?

分類Dev

複数のジェネレーターを持つforループはScalaでどのように機能しますか?

分類Dev

Scalaで型推論。この場合、どのように機能しますか?

分類Dev

scala.collection.TraversableView.NoBuilderはどのように機能しますか?

分類Dev

単純ランダムサンプリングとデータフレームSAMPLE関数はApacheSpark(Scala)でどのように機能しますか?

分類Dev

ジェネリック型はscalaの継承でどのように機能しますか?

分類Dev

Scalaの代入演算子の両側でオブジェクトをインスタンス化します。それはどのように機能しますか

分類Dev

ScalaのsbtまたはREPLでjdbのような機能(ブレークポイントの設定または変数の表示)を取得するにはどうすればよいですか?

分類Dev

Spray.ioはscala2.11.1 akka2.3.2でどのように機能しますか

分類Dev

Scalaメモ化:このScalaメモはどのように機能しますか?

分類Dev

Build.scalaでsbt-webを機能させるにはどうすればよいですか?

分類Dev

Scalaフォールディングはどのように機能しますか?

分類Dev

Scalaでは、宣言されていない値にはエラーがありません。それはどのように機能しますか?

分類Dev

JSR-223を使用してsbtコンソールでScalaインタープリターを取得するにはどうすればよいですか?

分類Dev

与えられたキーワードはScala3またはdottyでどのように機能しますか?

分類Dev

Scala演習6.11での関数型プログラミング。この理解はどのように機能しますか?

分類Dev

ケースクラスのシャローコピーはScalaでどの程度正確に機能しますか?

Related 関連記事

  1. 1

    Aggregateはscalaでどのように機能しますか?

  2. 2

    <:<演算子はScalaでどのように機能しますか?

  3. 3

    printfはscalaでどのように機能しますか?

  4. 4

    Scalaでは機能的平等はどのように機能しますか?

  5. 5

    このscalaの例では、同期はどのように機能しますか?

  6. 6

    Scalaでは「20秒」はどのように機能しますか?

  7. 7

    ScalaのfoldLeftはDataFrameでどのように機能しますか?

  8. 8

    Scalaのオプションでマップはどのように機能しますか?

  9. 9

    Implicit Ordering [Option [T]]はscalaでどのように機能しますか?

  10. 10

    `set.contains`はScalaでどのように機能しますか?

  11. 11

    Scalaアプリのトレイトとメインは内部でどのように機能しますか?

  12. 12

    scala-メソッド::はリストでどのように機能しますか?

  13. 13

    ラムダはScalaでどのように機能しますか?匿名クラスの上で機能しますか?

  14. 14

    複数のジェネレーターを持つforループはScalaでどのように機能しますか?

  15. 15

    Scalaで型推論。この場合、どのように機能しますか?

  16. 16

    scala.collection.TraversableView.NoBuilderはどのように機能しますか?

  17. 17

    単純ランダムサンプリングとデータフレームSAMPLE関数はApacheSpark(Scala)でどのように機能しますか?

  18. 18

    ジェネリック型はscalaの継承でどのように機能しますか?

  19. 19

    Scalaの代入演算子の両側でオブジェクトをインスタンス化します。それはどのように機能しますか

  20. 20

    ScalaのsbtまたはREPLでjdbのような機能(ブレークポイントの設定または変数の表示)を取得するにはどうすればよいですか?

  21. 21

    Spray.ioはscala2.11.1 akka2.3.2でどのように機能しますか

  22. 22

    Scalaメモ化:このScalaメモはどのように機能しますか?

  23. 23

    Build.scalaでsbt-webを機能させるにはどうすればよいですか?

  24. 24

    Scalaフォールディングはどのように機能しますか?

  25. 25

    Scalaでは、宣言されていない値にはエラーがありません。それはどのように機能しますか?

  26. 26

    JSR-223を使用してsbtコンソールでScalaインタープリターを取得するにはどうすればよいですか?

  27. 27

    与えられたキーワードはScala3またはdottyでどのように機能しますか?

  28. 28

    Scala演習6.11での関数型プログラミング。この理解はどのように機能しますか?

  29. 29

    ケースクラスのシャローコピーはScalaでどの程度正確に機能しますか?

ホットタグ

アーカイブ