gpt4 book ai didi

sbt - 为什么以前的sbt(版本≤0.13.6)在.sbt文件中的设置之间需要空白行?

转载 作者:行者123 更新时间:2023-12-03 11:41:43 26 4
gpt4 key购买 nike

因此,例如,您无法编写:

a := 3
b := 4

您必须将它们分开,如下所示:
a := 3

b := 4

我想不出具有类似要求的其他文件格式。对于新来者来说绝对令人惊讶。甚至一些长期使用sbt的用户也认为它令人反感。

以我的经验,这是在更改之前关于sbt的最经常问到的单个问题。

最佳答案

从sbt 0.13.7开始,不再需要空白行。因此,以下是历史信息。

简短的答案是空行使文件可机读和可写。

让我们打开包装。

首先,请注意,设置通常使用多行,例如长Seq或包含代码的任务正文。

其次,请注意设置是表达式,而不是语句。因此,sbt无法推断它们之间的分号。在Scala中,仅在语句之间推断分号。

因此需要空白行,以便sbt知道一个设置在哪里结束而下一个设置在哪里开始。

从理论上讲,它是否可以确定?也许。在2011年,Mark Harrah(sbt的创建者)wrote:

using the compiler to separate expressions [...] may happen at some point, but I try to avoid introducing the overhead of starting up a compiler wherever possible



因此,事实证明,此处的关键问题是性能。众所周知,Scala编译器的速度很慢。接下来,您可能会想知道,无论如何,都需要编译设置,不是吗?是的,但是很少有人意识到,为了提高性能,.sbt文件中的每个设置都是单独编译的,并且即使在sbt调用之间也要缓存编译结果。因此,如果您编辑构建并更改一项设置,则仅重新编译一项设置。

上面,我说过.sbt文件是机器可写的,而不仅仅是机器可读的。您可以随时更改设置,然后使用 session save保存更改。在2014年(Typesafe)的Jason Zaugg wrote:

The decision [on blank lines] originally came from the constraint that build.sbt should be machine editable. In an SBT session, you can run set foo := bar, and that will be persisted into the file.

In practise, people don't tend to use this feature that much, and we might revisit this decision [...]



有关空白行背后的设计注意事项以及将来如何更改的更多详细信息,请参阅Josh Suereth(也是Typesafe的作者)的 this writeup

关于sbt - 为什么以前的sbt(版本≤0.13.6)在.sbt文件中的设置之间需要空白行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21780787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com