Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么SBT项目被声明为惰性VAL?_Sbt - Fatal编程技术网

为什么SBT项目被声明为惰性VAL?

为什么SBT项目被声明为惰性VAL?,sbt,Sbt,根据“通过声明project类型的惰性val来定义项目。” 这当然是正常的,也是我们正在做的,但我想知道,如果有的话,它需要懒惰的原因是什么 使用常规的val而不是lazy val似乎有效。当然,使用严格的VAL会导致项目定义按顺序初始化,这意味着正向引用不起作用,需要按依赖顺序定义项目 对于一个相对较大的构建,有53个相互依赖的项目,执行订单实际上是一件好事™, 所以我想知道,除了允许定义以任意顺序出现之外,使用lazy val是否还有实际原因。这是一种常见的“最佳实践”。我还没有看到任何人明

根据“通过声明project类型的惰性val来定义项目。”

这当然是正常的,也是我们正在做的,但我想知道,如果有的话,它需要懒惰的原因是什么

使用常规的
val
而不是
lazy val
似乎有效。当然,使用严格的VAL会导致项目定义按顺序初始化,这意味着正向引用不起作用,需要按依赖顺序定义项目

对于一个相对较大的构建,有53个相互依赖的项目,执行订单实际上是一件好事™, 所以我想知道,除了允许定义以任意顺序出现之外,使用lazy val是否还有实际原因。

这是一种常见的“最佳实践”。我还没有看到任何人明确指出这一点,但根据我的经验,这种做法与sbt的一些特性有关

  • sbt解析任何
    *.sbt
    文件
  • sbt自上而下计算
    *.sbt
    文件
  • 您可以在多个sbt文件中的所有内容之间创建依赖关系
  • 现在想象一下,为了可读性,您想要构造
    build.sbt
    。我们有一些常用设置和3个项目(一个根目录和两个版本)

    sbt不会启动,因为在此
    构建中有多个错误。sbt

  • api
    server
    模块在定义之前在
    root
    项目中引用
  • commonSettings
    在所有项目中的定义之前被引用
  • 如果不让一切
    都变得懒惰
    ,重构构建文件就会变得困难。这就是所有sbt文档每年使用
    lazy val
    s的原因。避免第一次使用的用户感到困惑和沮丧

    希望有帮助,
    Muki

    如果我错了,请纠正我。因此,
    lazy val
    用法的主要思想是允许对声明进行重新排序,对吗?
    val root = project.in(file("."))
          .settings(commonSettings)
          .aggregate(api, server)
    
    val api = project.in(file("api"))
          .settings(commonSettings)
          .settings(name := "server")
    
    val server= project.in(file("api"))
          .settings(commonSettings)
          .settings(name := "api")
          .dependsOn(api)
    
    val commonSettings = Seq(organization := "com.example")